ActiveRecord在脏(未保存)关系上使用.where()

时间:2014-03-03 05:43:46

标签: ruby-on-rails activerecord ruby-on-rails-4

假设我有这种关系

模型/ person.rb

class Person
  belongs_to :group
end

模型/ group.rb

class Group
  has_many :people
end

现在我创建一个人并分配一个新组

group = Group.create(name: 'Group A')
group.person.new(name: 'John')
group.person.new(name: 'Lucy')
# Now if I call group.person.where(name: 'Lucy') 
# here it will return an empty result, 
# because it has not been persisted to the database.

无论如何都要在搜索中包含未保存的记录吗?

我想要这样做的原因是我需要为一个组创建一个 lot 的人,并且需要在中间执行where()查询以查看我是否已经添加了某人用这个名字。我想在实例化所有人员之后调用group.save,因为它在一个事务中执行,而不是每个人的单个事务都要慢得多。

1 个答案:

答案 0 :(得分:10)

不将记录保存到数据库呈现where方法无用。我在这里看到的只有可能的解决方案是Array操作。

您可以在此处利用ruby的数组select方法

group.persons.new(name: 'John')
group.persons.new(name: 'Lucy')

group.persons.select{|x| x['name']=='Lucy'} # will return the record

参考this questiondocumentation