Search code examples
ruby-on-railsruby-on-rails-3observer-patternlink-tourl-helper

Rails: Use URL Helper in Observer


I have an observer which looks like this:

class CommentObserver < ActiveRecord::Observer
    include ActionView::Helpers::UrlHelper

    def after_create(comment)
        message = "#{link_to comment.user.full_name, user_path(comment.user)} commented on #{link_to 'your photo',photo_path(comment.photo)} of #{comment.photo.location(:min)}"
        Notification.create(:user=>comment.photo.user,:message=>message)
    end

end

Basically all I'm using it to do is create a simple notification message for a certain user when someone posts a comment on one of their photos.

This fails with an error message:

NoMethodError (undefined method `link_to' for #<CommentObserver:0x00000102fe9810>):

I would have expected including ActionView::Helpers::UrlHelper would solve that, but it seems to have no effect.

So, how can I include the URL helper in my observer, or else render this some other way? I would happily move the "message view" into a partial or something, but an observer has no associated views to move this to...


Solution

  • So, it turns out this cannot be done for the same reason you can't use link_to in a mailer view. The observer has no information about the current request, and therefore cannot use the link helpers. You have to do it a different way.