Rails在:through模型上设置属性

时间:2015-04-07 09:59:04

标签: ruby-on-rails

考虑以下(人为的)示例模型关系:

class Yolk < ActiveRecord::Base
  has_many :whites, through: :eggs

  # has all sorts of interesting properties, like powderiness
end

class Egg < ActiveRecord::Base
  belongs_to :yolk
  belongs_to :white

  # The egg has a color property!
end

class White < ActiveRecord::Base
  has_many :yolks, through: :eggs

  # has its own set of properties, such as shininess
end

(注意鸡蛋有颜色属性 - 这很重要!)

如果我想在设置蛋本身的颜色属性时将蛋黄添加到白色(创建蛋),我该怎么办?

给定White变量名为white的实例和Yolk变量名为yolk的实例:

white.yolks << yolk不允许我设置创建的蛋的颜色,

Egg.create(white: white, yolk: yolk, color: 'blue')未更新变量white.yolks以包含新的yolk

如何在更新white.yolks时创建彩蛋?

<小时/> 更新:我意识到在现实世界中你只能得到一个蛋黄或白蛋;我的比喻有点崩溃。因此,为了澄清问题的范围,我不打算将项目之间的关系更改为has_one,或者创建一个包含所有属性的模型;只是假装一个鸡蛋可以有很多蛋黄和白色(出于某种原因)。

1 个答案:

答案 0 :(得分:1)

  

如果我想在设置蛋本身的颜色属性时将蛋黄添加到白色(创建蛋),我该怎么办?

直接回答这个问题。

white.eggs.create!(yolk: yolk, color: 'blue')

考虑到,whiteWhite的实例,yolkYolk的实例。

注意:您只需将has_many :eggs添加到WhiteYolk模型,即可双向查询。