我该如何通过Association建立一个has_one?

Und*_*ion 6 ruby-on-rails associations ruby-on-rails-3 has-one-through

对于一个has_one关联,我可以建立一个这样的关联:

foo.build_bar()
Run Code Online (Sandbox Code Playgroud)

我应该如何建立一个has_one, through:协会?

例如:

class Foo

  has_one :bar
  has_one :baz, through: :bar

end
Run Code Online (Sandbox Code Playgroud)

我应该如何建造baz?在这个例子中foo.build_baz得到一个No Method Error.

这里的文档说:

声明has_one关联时,声明类会自动获得与关联相关的四种方法:

association(force_reload = false)
association=(associate)
build_association(attributes = {})
create_association(attributes = {})
Run Code Online (Sandbox Code Playgroud)

然而,情况似乎并非如此.使用Pry来反省Foo我的实例我可以看到没有添加这样的方法,因为它将在has_one没有a 的情况下添加through:.

Und*_*ion 5

似乎一种可能性是:

foo.build_bar().build_baz()
foo.save!
Run Code Online (Sandbox Code Playgroud)

  • 这确实有效。我发现你在这个问题上的论点更有说服力。IOW,难道这不应该被认为是Rails中的一个bug,因为使用has时,has_one不会生成这些方法吗? (2认同)