这个阵列红宝石和mongoid最有效的解决方案

时间:2012-10-16 18:10:02

标签: ruby-on-rails ruby arrays ruby-on-rails-3 mongoid

我的问题是:

这个代码在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

非常感谢!

1 个答案:

答案 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")}