12月12日 has_many through:的interference, option
has_many :products, through: :cart_items, source: :product
build定义:collection.build(attributes = {}, …) 本例子中collection换成cart_items.
说明:这个method返回一个或多个new objects of the associated type.但关联的对象尚未保存。需要save.
Create定义:collection.create(attributes = {})
说明: 只返回一个新建关联对象,并自动被save.
source定义: 指定has_many :through关联的源关联name.只有无法从关联名中解出源关联的名称时才 需要设置
这个选项。
说明:这是has_many中的option选项附加
参考:Active Record asscoiation reference 关联参考
http://guides.rubyonrails.org/v2.3.11/association_basics.html#has-one-association-reference
4.3 has_many Association Reference
我的理解:一旦两个model建立一对多的关联,这个1的model自动赋予了13个methods来操作关联的各类动作。如build ,create等等。
例子:
class Customer < ActiveRecord::Base
has_many :orders
end
collection(force_reload = false) 实例:@orders = @customer.orders
collection<<(object,...) 实例: @customer.orders << @order1
解释:增加一个或多个order对象. 如果用delete移除了某个对象,可以使用这个method增加回来,自动为这个对象的外键赋值,nil不再为空。
collection.delete(object...) 实例:@customer.orders.delete(@order1)
//简单解释:不删除只去掉关联
解释:delete,从@customer.orders移除一个或多个object,方法是通过把@order1的关联外键设为nil.这样再使用@customer.orders的时候,就不会调用已经移除的@order1,但Order数据库中仍然存在@order1.
collection.clear,是移除全部,和delete类似。
collection.empty? 解释:如果是空的则返回true
collection.exists?(...) 解释:根据(...)条件返回true或false,如果不加(...)根据是否有关联对象返回boolean值。
colleciton.size 解释:returns the number of objects in the collection.
colleciton.find(...) 实例:
@open_orders = @customer.orders.find(:all, :conditions => "open = 1")
解释:不明白怎么查找的???
4.3.2 Options for has_many
You can alter that behavior in a number of ways.For example, an association with several options might look like this:
class Customer < ActiveRecord::Base
has_many :orders, :dependent => :delete_all,
:validate => :false
end
合计有22个选项options可进行customization.
常用举例:
:validate, 如果为false,保存customer对象的时候,不验证关联的orders对象。
:as, 设置别名,或者使用多态关联(还没有体会到方便的用途),见2.9 Polymorphic Associations
:autosave, 当保存父对象时,自动保存所以子对象,并把标记为destruction的删除
:class_name, 举例:如果一个customer有很多orders,但是实际包含orders的model的名字是Transaction,需要如下写法:
class Customer < ActiveRecord::Base
has_many :orders, :class_name => "Transaction"
end
:source,
12月12日 has_many through:的interference, option的更多相关文章
- 12月22日《奥威Power-BI财务报表数据填报》腾讯课堂开课啦
一扇可以通向任何地方的“任意门”,是我们多少人幼时最梦寐以求的道具之一.即使到了现在,工作中的我们还会时不时有“世界那么大,我想去看看”的念头,或者在突然不想工作的时刻,幻想着自己的家门变成了“任意门 ...
- 2016年12月31日 星期六 --出埃及记 Exodus 21:26
2016年12月31日 星期六 --出埃及记 Exodus 21:26 "If a man hits a manservant or maidservant in the eye and d ...
- 2016年12月30日 星期五 --出埃及记 Exodus 21:25
2016年12月30日 星期五 --出埃及记 Exodus 21:25 burn for burn, wound for wound, bruise for bruise.以烙还烙,以伤还伤,以打还打 ...
- 2016年12月29日 星期四 --出埃及记 Exodus 21:24
2016年12月29日 星期四 --出埃及记 Exodus 21:24 eye for eye, tooth for tooth, hand for hand, foot for foot,以眼还眼, ...
- 2016年12月28日 星期三 --出埃及记 Exodus 21:23
2016年12月28日 星期三 --出埃及记 Exodus 21:23 But if there is serious injury, you are to take life for life,若有 ...
- 2016年12月27日 星期二 --出埃及记 Exodus 21:22
2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...
- c++中变量声明和变量定义的区别。2016年12月6日
整个流程: 1.程序告诉cpu,程序将要使用一个变量.(暂时不一定用到,先说一下.) 2.程序告诉CPU,程序现在就要使用一个变量.(现在就用) 3.cpu按照这个变量的类型,把内存划分出几个单位(b ...
- 2015年12月28日 Java基础系列(六)流
2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流
- 2015年12月13日 spring初级知识讲解(四)面向切面的Spring
2015年12月13日 具体内容待补充...
随机推荐
- VS2010的快捷键;VS2012变化的快捷键
注释::VS2010是(Ctrl+E,C),VS2012是(Ctrl+K, Ctrl+C),实际操作,按住Ctrl键不放,先按K键,再按C键.相当于Ctrl+K加 Ctrl+C的组合键 反註解:VS2 ...
- JavaScript实现功能全集
JavaScript就这么回事1:基础知识 1 创建脚本块 <script language="JavaScript">JavaScript code goes her ...
- 把HDFS上的数据导入到Hive中
1. 首先下载测试数据,数据也可以创建 http://files.grouplens.org/datasets/movielens/ml-latest-small.zip 2. 数据类型与字段名称 m ...
- Python 面向对象教程
总结:函数式的应用场景 –> 各个函数之间是独立且无共用的数据. 面向对象三大特性 面向对象的三大特性是指:封装.继承和多态. 一.封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封 ...
- Linux系统下C语言程序的构建过程
本文转载自:http://www.ruanyifeng.com/blog/2014/11/compiler.html 源码要运行,必须先转成二进制的机器码.这是编译器的任务. 比如,下面这段源码(假定 ...
- python进程join()函数理解
Join()是主程序等我这个进程执行完毕了,程序才往下走
- SpringBoot集成Socket服务后打包(war包)启动时如何启动Socket服务(web应用外部tomcat启动)
1.首先知道SpringBoot打包为jar和war包是不一样的(只讨论SpringBoot环境下web应用打包) 1.1.jar和war包的打开方式不一样,虽然都依赖java环境,但是j ...
- spring中对象转json过滤(jackson)
spring自带的json解析器是jackson jackson注解 @JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性. @JsonFormat 此注解用于属性上,作用是把 ...
- BZOJ 2434 阿狸的打字机(fail树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2434 题意:阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28 ...
- sql逻辑查询语句的执行顺序
SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN ...