假设我有这种关系
模型/ 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,因为它在一个事务中执行,而不是每个人的单个事务都要慢得多。
答案 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