ActiveRecord :: Relation - 如何知道挂起的插入?

时间:2015-01-06 21:34:14

标签: ruby-on-rails-3 activerecord

给定的

class Parent < ActiveRecord::Base
  has_many :children
end

class Child < ActiveRecord::Base

end

p = Parent.first
c = p.children.build()

如何在不触发加载关联的情况下测试p.children是否有任何挂起的插入?如果我检查p.children.present?它将加载关联。

Rails 3.2

有助于澄清的说明: “挂起”是指内存中尚未持久化的对象。我想知道(并迭代)任何这些尚未持久化的对象而不加载关联。基本上,如果我调用find_or_initialize_by ......它只会查看数据库。我正在尝试检查是否有任何尚未保存的记录,我可以更新而不是另一个插入。

1 个答案:

答案 0 :(得分:0)

你误解了构建。它只是新的别名,没什么特别的。 https://github.com/rails/rails/blob/959fb8ea651fa6638aaa7caced20d921ca2ea5c1/activerecord/lib/active_record/relation.rb#L84

Build不会在数据库中“创建”或进行挂起插入,只需在内存中创建一个新对象,以便视图可以获取此对象并显示某些内容,尤其是对于表单。

以后可以保存这些类型的对象,但没有必要这样做。