0

Userモデルのhas_many messages未読メッセージをリレーションとして取得したいので、連鎖させたい

現時点で、私のために働いた唯一のことは

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

4

2 に答える 2

0

current_userモデルから変数にアクセスできたとしても
、モデルは現在誰がアプリを使用しているかについて何も知らないはずです。

簡単な解決策は、すべてのメッセージではなく、受信したメッセージのみを使用することだと思います。そのため、受信者の身元を確認する必要はありません。

または、スコープunread_byを呼び出すと、より理解しやすくなり、臭いも少なくなります。

于 2013-02-26T05:43:08.807 に答える
0

既にcurrent_user.messagesを使用してメッセージをフィルタリングしているため、メッセージを再度フィルタリングする必要はありません。

ラムダなしでスコープを書く方が良い

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

うまくいけば、それは役に立ちます。

于 2013-02-26T05:42:46.697 に答える