Ruby on Rails。如何在 :belongs to 关系中使用 Active Record .build 方法?

2023-11-22

我一直无法找到有关 Rails 中 .build 方法的任何文档(我目前使用的是 2.0.2)。

通过实验,您似乎可以使用 build 方法将记录添加到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. 构建是如何工作的,以便 Rails 足够聪明,能够弄清楚如何以正确的顺序保存记录?

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

  3. 在哪里可以找到有关此方法的任何文档?

谢谢


记录在哪里:

来自“has_many”关联下的 API 文档模块 ActiveRecord::Associations::ClassMethods"

collection.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")

or even

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

您还可以使用 create_dog 立即保存它(非常类似于您可以在集合上调用的相应“创建”方法)

Rails 如何足够智能?这很神奇(或者更准确地说,我只是不知道,很想知道!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby on Rails。如何在 :belongs to 关系中使用 Active Record .build 方法? 的相关文章

随机推荐