Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何计算mailboxer gem的邮件数_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何计算mailboxer gem的邮件数

Ruby on rails 如何计算mailboxer gem的邮件数,ruby-on-rails,ruby,Ruby On Rails,Ruby,hi-am使用优点向通过邮箱发送邮件的用户授予徽章。 我已经设置了mailboxer,它可以正常工作,用户可以进行对话并互相发送消息。 从这一点上,我增加了一个优点,即向发送类似消息的用户授予徽章 grant_on 'messages#create', badge: 'Engraved Glass', to: :user do |message| message.user.messages.count >= 50 end 但每当我创建新消息时,我都会遇到这个错误 unde

hi-am使用优点向通过邮箱发送邮件的用户授予徽章。 我已经设置了mailboxer,它可以正常工作,用户可以进行对话并互相发送消息。 从这一点上,我增加了一个优点,即向发送类似消息的用户授予徽章

grant_on 'messages#create',  badge: 'Engraved Glass', to: :user do    |message|
    message.user.messages.count >= 50
end
但每当我创建新消息时,我都会遇到这个错误

undefined method `user' for true:TrueClass

但是当它在一个旧的对话中发送消息时,它不会抛出这个错误,这有点棘手。当您使用更严格的设置时,例如注释模型、注释控制器和@Comment对象,那么您的建议就可以了。但因为这是一个messages_控制器,谁知道你的mailboxer对象叫什么,而且:user无论如何都不是对象上的属性。。一切都乱了套

但我们可以解决它。如果模型和控制器不同,这里有几个规则

  • 确保定义了一个对象。Mailboxer希望messages\u控制器定义@message对象-因此在消息的创建操作中确保将其设置为
    @message=current\u user。send\u message(发送给用户,参数[:message][:message\u body],参数[:message][:subject])
    -必须是使用@符号的实例变量

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

  • 由于
    :接收器
    不直接与模型对齐,请为其指定模型名称
    模型名称
    “用户”

  • 所以现在你的补助金看起来更像

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

    在我的消息#create controller中,我有这样一个`recipients=User.where(id:params['recipients'])conversation=current_User.send_消息(recipients,params[:message][:body],params[:message][:subject])。会话flash[:success]=“message has sent!”重定向到会话路径(conversation)`那么我如何根据你的建议存档它呢@trhl就像我说过的关于命名约定的期望一样,它期望messages\u controller呈现一个
    @message
    对象-在一个实例变量中,你在一个局部变量中有一个
    conversation
    对象。因此,将对话更改为
    @message
    ,然后在重定向更改中也进行相同的更改,但没有人被授予徽章,我只希望发件人被授予徽章,而不是收件人
    messages
    返回收据,就像说这是一封已发送的邮件。因此,发送消息的接收者实际上就是发送消息的人令人困惑的是,我知道:)但是如果你检查其中一个对象(user.messages.first.inspect)-它看起来会像邮箱:收据id:114,接收者id:1,接收者类型:“用户”,通知id:57,读起来是:真,垃圾:假,删除:假,邮箱类型:“sentbox”,创建时间:“2016-04-08 17:54:53”,更新时间:“2016-04-08 17:54:53”--您会注意到没有发送方和接收方,因为这只是发送方