我的问题是:
这个代码在ruby on rails和mongoid odm中是否有一些最有效的解决方案?
messages_without_responses = Message.all.select{|message| message.sender == current_user || message.receiver == current_user}
messages = Array.new
messages_without_responses.each do |m|
if m.message_responses.count > 0
messages << m
else
messages << m if m.receiver_id == current_user.id && m.place_receiver == "inbox"
end
end
非常感谢!
答案 0 :(得分:1)
我不知道您的数据库中有多少条记录,但如果数字可能会变大,您最好在数据库级别而不是在Ruby中过滤掉您想要的记录。因此Message.all
上的SQL条件(你必须根据需要进行翻译以使其可用于Mongoid;我之前从未使用过它。)
ms = Message.all(:conditions => ["sender_id = ? OR receiver_id = ?", current_user.id, current_user.id])
其余的都不错,但你可以让它更简洁:
ms.select { |m| m.message_responses.count > 0 || (m.receiver == current_user && m.place_receiver == "inbox")}