您正在使用优点向通过邮箱发送邮件的用户授予徽章。 我有设置邮箱和它的工作正常,用户可以进行对话并相互发送消息。 从那里我添加了奖励给发送这样的消息的用户的徽章
grant_on 'messages#create', badge: 'Engraved Glass', to: :user do |message|
message.user.messages.count >= 50
end
但是当我创建新消息时,我收到此错误
undefined method `user' for true:TrueClass
但是当它在旧对话上发送消息时它不会抛出此错误
答案 0 :(得分:0)
这有点棘手。当您使用更直接的设置(例如Comment模型,使用comments_controller和@comment对象)时,您提出的建议就没问题。但是因为这是一个messages_controller,谁知道你的邮箱对象被调用了什么:用户不是对象的属性..这一切都很糟糕。
但我们可以解决它。如果模型和控制器不相同,那么这里有一些规则。
确保定义对象。 Mailboxer希望messages_controller定义一个@message对象 - 所以在你的消息创建动作中确保你设置它@message = current_user.send_message(to_user, params[:message][:message_body],params[:message][:subject])
- 必须是一个使用@符号的实例变量
确保为用户设置正确的属性。在您的情况下,使用Mailboxer,它将是:receiver
由于:receiver
未直接与模型对齐,请为其指定模型名称model_name
“用户”
所以现在你的补助金看起来更像是
grant_on 'messages#create', badge: 'Engraved Glass', to: :receiver, model_name: "User" do |message|
message.receiver.messages.count >= 50
end