如何计算邮箱gem的消息

时间:2016-04-08 12:54:49

标签: ruby-on-rails ruby

您正在使用优点向通过邮箱发送邮件的用户授予徽章。 我有设置邮箱和它的工作正常,用户可以进行对话并相互发送消息。 从那里我添加了奖励给发送这样的消息的用户的徽章

grant_on 'messages#create',  badge: 'Engraved Glass', to: :user do    |message|
    message.user.messages.count >= 50
end

但是当我创建新消息时,我收到此错误

undefined method `user' for true:TrueClass

但是当它在旧对话上发送消息时它不会抛出此错误

1 个答案:

答案 0 :(得分:0)

这有点棘手。当您使用更直接的设置(例如Comment模型,使用comments_controller和@comment对象)时,您提出的建议就没问题。但是因为这是一个messages_controller,谁知道你的邮箱对象被调用了什么:用户不是对象的属性..这一切都很糟糕。

但我们可以解决它。如果模型和控制器不相同,那么这里有一些规则。

  1. 确保定义对象。 Mailboxer希望messages_controller定义一个@message对象 - 所以在你的消息创建动作中确保你设置它@message = current_user.send_message(to_user, params[:message][:message_body],params[:message][:subject]) - 必须是一个使用@符号的实例变量

  2. 确保为用户设置正确的属性。在您的情况下,使用Mailboxer,它将是:receiver

  3. 由于:receiver未直接与模型对齐,请为其指定模型名称model_name“用户”

  4. 所以现在你的补助金看起来更像是

    grant_on 'messages#create', badge: 'Engraved Glass', to: :receiver, model_name: "User" do |message|
     message.receiver.messages.count >= 50
    end