1

私の質問は:

Ruby onRailsとMongoidodmでこのコードの最も効率的な解決策はありますか?

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

DB にいくつのレコードがあるかはわかりませんが、数が大きくなる可能性がある場合は、必要なレコードを Ruby ではなく DB レベルでフィルター処理することをお勧めします。したがって、SQL 条件はオン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 に答える