在回调轨道上使用条件

时间:2014-06-24 21:14:28

标签: ruby-on-rails model callback conditional

我的评论模型上有一个回调,它会创建一个发送给相应成员的通知,但如果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

我如何让它按照我想要的方式工作?

1 个答案:

答案 0 :(得分:3)

尝试在模型层中使用current_user或类似的东西是非常不典型的。一个问题是,您真正将模型层与控制器层的当前状态耦合,这将使单元测试模型更加困难且容易出错。

我建议不要使用after_create挂钩来执行此操作,而是在控制器层创建通知。这样您就可以访问current_user而无需跳过任何环节。