2012-10-16 56 views
1

我的問題是:這個陣列紅寶石最有效的解決方案和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 

非常感謝!

+0

你爲什麼不喜歡你寫的是什麼? –

+0

我喜歡,工作正常:D,但我想知道是否可以以更好的方式完成。 – hyperrjas

回答

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")} 
+0

非常感謝! – hyperrjas