在范围中使用current_user

时间:2013-02-26 05:13:13

标签: ruby-on-rails-3 lambda scope

我的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

2 个答案:

答案 0 :(得分:0)

因为,您已使用 current_user.messages 过滤邮件,无需再次过滤邮件。

更好地编写没有lambda的范围

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

希望,这会有所帮助。

答案 1 :(得分:0)

即使您可以从模型中访问current_user变量:
该模型不应该知道谁正在使用您的应用程序。

我认为一个简单的解决方案是仅使用收到的消息而不是所有消息,这样您就不必检查接收者的身份。 / p>

或者,调用范围unread_by会使其更容易理解,也更不会发臭。