1

我的问题是:

在 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

非常感谢你!

4

1 回答 1

1

我不知道您的数据库中有多少记录,但如果数量可能会变大,您最好在数据库级别而不是在 Ruby 中过滤掉您想要的记录。因此,SQL 条件为 on Message.all(您必须根据需要进行翻译才能使其与 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")}
于 2012-10-16T18:24:40.567 回答