我的评论模型上有一个回调,它会创建一个发送给相应成员的通知,但如果current_member正在评论他自己的可评论对象,我不希望它创建通知。我尝试使用除非有条件的这样:
after_create :create_notification, on: :create, unless: Proc.new { |commentable| commentable.member == current_member }
def create_notification
subject = "#{member.user_name}"
body = "wrote you a <b>Comment</b> <p><i>#{content}</i></p>"
commentable.member.notify(subject, body, self)
end
但是我收到了这个错误:undefined local variable or method 'current_member' for #<Comment:0x746e008
我如何让它按照我想要的方式工作?
答案 0 :(得分:3)
尝试在模型层中使用current_user
或类似的东西是非常不典型的。一个问题是,您真正将模型层与控制器层的当前状态耦合,这将使单元测试模型更加困难且容易出错。
我建议不要使用after_create
挂钩来执行此操作,而是在控制器层创建通知。这样您就可以访问current_user
而无需跳过任何环节。