Rails, How to render a view/partial in a model

Viewed 45860

In my model I have:

after_create :push_create

I push_create I need to render a view. I'm trying to do that like so:

  def push_event(event_type)
    X["XXXXX-#{Rails.env}"].trigger(event_type, 
      {
        :content => render( :partial =>"feeds/feed_item", :locals => { :feed_item => self })
      }
    )
  end

This angers rails as it doesn't like me rendering a view in the model but I need it there.

Error:

NoMethodError (undefined method `render' for #<WallFeed:0x1039be070>):

Suggestions? Should I render it somewhere else somehow? Or how can I render in the model to set content? Thanks

10 Answers

Rails 6.0.0 compatible answer, since I ended up on this page while searching for a solution:

lookup_context = ActionView::LookupContext.new(Rails.configuration.paths["app/views"])
renderer = ActionView::Base.new(lookup_context)
renderer.extend(Rails.application.helpers)
renderer.render \
  template: "foo/bar",
  formats: [:html],
  handlers: [:erb],
  locals: { user: User.new }
Related