Reputation: 6896
I am trying to use observers in my rails app to create a new entry in my "Events" Model every time a new "Comment" is saved. The comments are saving fine, but the observer is not creating events properly.
// comment_observer.rb
class CommentObserver < ActiveRecord::Observer
observe :comment
def after_save(comment)
event = comment.user.events.create
event.kind = "comment"
event.data = { "comment_message" => "#{comment.message}" }
event.save!
end
This observer works great I use it in the console but it doesn't seem to be observing properly; when I try my app it just doesn't seem to create events. I don't see errors or anything.
Also I have config.active_record.observers = :comment_observer
in my environment.rb file.
Where am I going wrong? Should I be taking a different approach?
Upvotes: 4
Views: 4004
Reputation: 5426
Indeed, you need observe :comment
only if comment class can’t be inferred from the observer name (i.e., is not called CommentObserver).
Did you declare your observer in application.rb:
# Activate observers that should always be running
config.active_record.observers = :comment_observer
Upvotes: 25
Reputation: 49114
You shouldn't need the the observe statement since your class is named CommentObserver.
Try leaving it out.
Or try:
observe Comment
instead of
observe :comment
Upvotes: 2