Ruby on Rails。 如何在一个:属于关系中使用Active Record .build方法?

我一直无法find在Rails中的.build方法的任何文档(我目前使用2.0.2)。

通过实验,似乎可以使用构build方法在logging保存之前将logging添加到has_many关系中。

例如:

 class Dog < ActiveRecord::Base has_many :tags belongs_to :person end class Person < ActiveRecord::Base has_many :dogs end # rails c d = Dog.new d.tags.build(:number => "123456") d.save # => true 

这将正确保存狗和标签的外键。 这似乎并不适用于belongs_to关系。

 d = Dog.new d.person.build # => nil object on nil.build 

我也试过了

 d = Dog.new d.person = Person.new d.save # => true 

Dog的外键在这种情况下没有被设置,因为在保存的时候,新的人没有ID,因为它还没有被保存。

我的问题是:

  1. 如何构build工作,使Rails足够聪明,弄清楚如何以正确的顺序保存logging?

  2. 我怎么能在belongs_to关系中做同样的事情?

  3. 我在哪里可以find关于这个方法的任何文档?

谢谢

在哪里被logging:

从“ Module ActiveRecord :: Associations :: ClassMethods ”中的has_many关联下的API文档,

collection.build(attributes = {},…)返回一个或多个集合types的新对象,这些对象已经通过属性实例化并通过外键链接到此对象,但尚未保存。 注意:这只适用于关联的对象已经存在,而不是如果它是零!

在相反的方向build立的答案是稍微改变的语法。 在你的狗的例子中,

 Class Dog has_many :tags belongs_to :person end Class Person has_many :dogs end d = Dog.new d.build_person(:attributes => "go", :here => "like normal") 

甚至

 t = Tag.new t.build_dog(:name => "Rover", :breed => "Maltese") 

您也可以使用create_dog将其立即保存(就像您可以在集合上调用相应的“create”方法一样)

轨道如何足够聪明? 这是魔术(或者更准确地说,我只是不知道,很想知道!)

 @article = user.articles.build(:title => "MainTitle") @article.save