iamdhunt
iamdhunt

Reputation: 453

Using conditionals on callbacks rails

I have a callback on my comment model that creates a notification that gets sent out to the appropriate members but I don't want it to create a notification if the current_member is commenting on his own commentable object. I've tried using the unless conditional like this:

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

But I get this error: undefined local variable or method 'current_member' for #<Comment:0x746e008

How do I get this to work like I want?

Upvotes: 0

Views: 205

Answers (1)

bratsche
bratsche

Reputation: 2674

It's pretty atypical to try to use current_user or things like that from the model layer. One problem is that you're really coupling your model layer to the current state of the controller layer, which will make unit testing your models much more difficult and error-prone.

What I would recommend is to not use an after_create hook to do this, and instead create the notifications at the controller layer. This will give you access to current_user without needing to jump through any hoops.

Upvotes: 3

Related Questions