我有2個表:Rails的ActiveRecord的查找表屬性的給定值條件2個表
- 包含會話列表關聯到每個(「recipient_id」它們的ID(和兩個用戶ID的會話表和'sender_id')
- 包含與現有對話之一相關消息的消息表每個消息實例都包含布爾屬性'read'(默認爲false),用於顯示對話中是否有未讀消息。
所以對話has_many:消息和消息belongs_to:對話
我的目標是檢查current_user是否有任何未讀消息(在他的任何現有會話中)顯示一般警報。 到目前爲止,我已經設法爲每個對話顯示一個警報,但我正在努力尋找一種有效的方式來實現一個通用的。
我最初的做法是:
- 在每個當前用戶的對話找到的最後一條消息。
- 評估當前用戶是否發送了最後一封郵件中的每一封郵件,以及是否讀取== false。
- 如果上一條消息中的任何一條符合這些條件,則返回true。
這翻譯成以下代碼:
@conversations = current_user.conversations
@unread = []
if @conversations.exists?
@conversations.each do |conversation|
if conversation.messages.exists?
if conversation.messages.last.user_id != current_user.id && conversation.messages.last.read == false
@unread << true
end
end
end
end
@unread.include?(true)
end
我很新的編碼,但它似乎在所有CURRENT_USERS對話具有循環並創建一個陣列,以檢查是否有任何「一個非常低效的方法真正的「價值。
我會循環瀏覽郵件本身,但實例只有發件人的user_id,所以如果我沒有將它與Conversation模型關聯起來,就無法知道郵件是否發送給他。
你能幫助一個有效的方法來實現這一點,更適當的活動記錄查詢或更好的方法。順便說一下,不知道如果事情,但我在我的開發環境中使用PostgreSQL。
感謝
非常感謝Sajan。這說得通。讓我試試看,一有消息就儘快回覆你。 – Andrew