2013-02-26 66 views
0

User模型has_manymessages我想作爲一個關係到檢索模型的未讀郵件,所以我可以IT連鎖在一個範圍內使用CURRENT_USER

的那一刻,只爲我工作的事情是

class Message 

scope :unread, lambda{ |user| where("receiver_open = false AND received_messageable_id = ?", user.id)} 

,然後訪問它

current_user.messages.unread(current_user) 

你可以看到,這是一個有點臭

是否有辦法讓範圍使用我用來調用範圍的current_user?因此它將是current_user.messages.unread

回答

0

因爲您已經使用current_user.messages過濾了消息,因此無需再次過濾消息。

更好地寫出範圍不拉姆達

scope :unread, where("receiver_open = false") 

希望,它將幫助。

+0

但我必須檢查'received_messageable_id' – 2013-02-26 05:50:04

+0

爲什麼你需要received_messageable_id,它是否與user_id不一樣? – 2013-02-26 05:57:51

+0

消息具有發送者和接收者。所以我想檢查current_user是接收者 – 2013-02-26 06:03:17

0

即使您可以訪問您的模型中的current_user變量:
模型不應該知道誰正在使用您的應用。

我認爲,一個簡單的解決辦法是隻使用收到的消息而不是所有消息,所以你不會有檢查接收者的身份。

或者,打電話給您的範圍unread_by將使它更容易理解,也更少臭。