1
我有一个关系到一个朋友的模型(的has_many/belongs_to的)测试,如果在加盟的ActiveRecord查询存在对象
连接后用户模式,我想能够检查是否在存在一定朋友对象已加入用户的朋友:
users = User.joins(:friends).where("some condition") # subset of total friends
fs = Friend.all
fs.each do |f|
if users.friends.includes?(f) # match!
...
else # no match
...
end
代码原样不起作用,我在代码中获取此功能时遇到困难。
我不想再次查询数据库。关键是要检查已经加入的activerecord集合 – Jason
@Jason用你现在查询的方式,你在这件事上没有选择。请记住,活动记录关系是延迟加载的。意思是说,你的'用户'或'u'对象还没有填充“朋友”列表。只有当你尝试使用关联时,它们才会被加载(导致另一个数据库调用)。如果你检查你的日志,你会注意到一个初始的“用户”查询的查询,然后当你尝试用'friends集合做什么时,你会看到另一个查询。 [第1部分或第2部分] –
@Jason [2的第2部分]我猜你担心再次触摸数据库的性能。如果你喜欢,我可以发布一个替代品,但如果你愿意的话,你不得不在Ruby中迭代一个数组,而不是让数据库优化发生。总之,假设你在这些列上有适当的索引,这种情况下的数据库查找可能比线性数组搜索快得多。 –