我希望在其他用户删除与原始用户相关的对象时向该用户发送电子邮件。但现在我得到了这个错误:突出显示@agreement = params[:agreement]
的undefined method
[]' for nil:NilClass`(在完整代码下方)。基本上,我试图在对象被删除之前发送电子邮件。
我的邮件
def agreement_delete
@agreement = params[:agreement]
@sent_user = User.find(@agreement.user_id)
@user = User.find(@agreement.thought.user_id)
@user_email = @user.email
mail(to: @user_email, subject: "It's been deleted!")
end
我的协议控制器
def destroy
@agreement = Agreement.find(params[:id])
UserMailer.with(agreement: @agreement).agreement_delete.deliver_later
@agreement.destroy
redirect_back
end
我的协议rb
before_destroy :check_delete
private
def check_delete
UserMailer.agreement_delete.deliver
end
我认为params[:agreement]
有什么问题,但是在创建协议时发送电子邮件的邮件程序工作正常,并且具有相同的@agreement = params[:agreement]
。我真的很感激帮助。
顺便说一句,电子邮件确实会被发送。只是应用程序由于错误而中断。
1条答案
按热度按时间1sbrub3j1#
您的协议控制器
你的邮件
你的协议rb
在评论中,你说
params[]
以某种方式可用于其他邮件。奇怪又出乎意料。你不应该依赖它。为您的方法提供它们需要的信息并且只提供它们需要的信息是一种更好、更安全的做法。如果你真的想使用
.deliver_later
,我会建议一个不同的模式:#destroy
操作应该调用可以.perform_later
的作业。作业应发送电子邮件,然后删除记录。