当has_many
在模型上声明关系时,会动态添加访问器方法,允许传入 id 数组:
class Example < ActiveRecord::Base
has_many :foos
end
这使得:
$ m = Example.create!
$ m.foo_ids = [1, 2, 3]
但是,当has_one
声明关系时,会创建这样的访问器:
class Example < ActiveRecord::Base
has_one :foo
end
不允许:
$ m = Example.create!
$ m.foo_id = 1 # No method error
为什么会出现这种差异?
为什么可以使用它们的 id 从一个表单中设置多个关联,但是要设置一个单一的关联,需要一个嵌套表单并且accepts_nested_attributes_for
需要在模型上定义一个?这感觉就像 API 中的差异。