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的更多相关文章

  1. 12月22日《奥威Power-BI财务报表数据填报》腾讯课堂开课啦

    一扇可以通向任何地方的“任意门”,是我们多少人幼时最梦寐以求的道具之一.即使到了现在,工作中的我们还会时不时有“世界那么大,我想去看看”的念头,或者在突然不想工作的时刻,幻想着自己的家门变成了“任意门 ...

  2. 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 ...

  3. 2016年12月30日 星期五 --出埃及记 Exodus 21:25

    2016年12月30日 星期五 --出埃及记 Exodus 21:25 burn for burn, wound for wound, bruise for bruise.以烙还烙,以伤还伤,以打还打 ...

  4. 2016年12月29日 星期四 --出埃及记 Exodus 21:24

    2016年12月29日 星期四 --出埃及记 Exodus 21:24 eye for eye, tooth for tooth, hand for hand, foot for foot,以眼还眼, ...

  5. 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,若有 ...

  6. 2016年12月27日 星期二 --出埃及记 Exodus 21:22

    2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...

  7. c++中变量声明和变量定义的区别。2016年12月6日

    整个流程: 1.程序告诉cpu,程序将要使用一个变量.(暂时不一定用到,先说一下.) 2.程序告诉CPU,程序现在就要使用一个变量.(现在就用) 3.cpu按照这个变量的类型,把内存划分出几个单位(b ...

  8. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

  9. 2015年12月13日 spring初级知识讲解(四)面向切面的Spring

    2015年12月13日 具体内容待补充...

随机推荐

  1. [转]使用C#开发ActiveX控件全攻略

    前言: 这段时间因为工作的需要,研究了一下ActiveX控件.总结如下: 先说说ActiveX的基本概念. 根据微软权威的软件开发指南MSDN(Microsoft Developer Network) ...

  2. Linux命令: 结束命令

    1)ctrl+c,退出命令 2)q,退出文件

  3. python练习题-写一个函数,打印所有包含copy方法的内置对象

    代码: #encoding=utf-8for i in dir(__builtins__):    #print "i:",i    try: #这里的i是个字符串,并不能直接用d ...

  4. ES6学习--Array.from()方法

    Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组. 那么什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有length属性的对象. 1.将类数组对象转换为真正数 ...

  5. bzoj1638 / P2883 [USACO07MAR]牛交通Cow Traffic

    P2883 [USACO07MAR]牛交通Cow Traffic 对于每一条边$(u,v)$ 设入度为0的点到$u$有$f[u]$种走法 点$n$到$v$(通过反向边)有$f2[v]$种走法 显然经过 ...

  6. dba和运维专家们说有丰富的大型分布式系统架构设计经验纯属扯淡

    如果,一开始就从事dba和运维的专家们说他们有丰富的大型分布式系统架构设计经验,那纯属扯淡.除非,他们从是从开发专家或者架构师转型而来,那么他们才有资格说自己有丰富的大型分布式系统架构设计经验. 运维 ...

  7. 20162311 Hash 补分博客

    20162311 Hash 补分博客 一.任务详情 二.解题过程 除留余数法和拉链法都懂了,也都会做,主要是开放寻址法.课下查了一些资料,也问了老师才彻底理解 引用例子 引用网上的一个例子来理解 参考 ...

  8. 洛谷月赛 Hello World(升级版) - 动态规划

    题目背景 T1答案要mod1000000007(10^9+7),请重新提交,非常抱歉! 一天,智障的pipapi正在看某辣鸡讲义学程序设计. 题目描述 在讲义的某一面,他看见了一篇文章.这篇文章由英文 ...

  9. Python3基础 raise 产生RuntimeError 异常

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  10. Python3基础 sys.path 查看搜索路径变量

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...