1

I understand advice available on the net to never, ever, ever render in a model, for this case I need do it

 class Order
    def canceled_order_message(order)
            admin = User.find_or_create_by(email: "myemail")
            message = Message.new(subject: I18n.t(".buyer_has_canceled_the_order"), 
                      body: "#{render_to_string :partial => 'users/messages/templates/sent_by_admin/canceled_order', :locals => {:order => order}}")
            message.send_message
            message.save
    end
 end

I need render inside message body attribute:

render_to_string :partial => 'users/messages/templates/sent_by_admin/canceled_order

How can I do it?

Thank you!

hyperrjas
  • 10,666
  • 25
  • 99
  • 198
  • 2
    This code really does belong in your `Order` controller, or better yet in a Resque or Sidekiq background job (since you're sending a message which could take some time). What benefit do you get from placing it in the model? – cdesrosiers Oct 08 '12 at 15:58
  • Now is working. I have fixed the logic and now the render partial is called from a helper method. Is a delayed job task, runed in model like `def self.canceled_order_message(order, partial) ...end`. I send the partial as parameter to this method from my controller with `Order.delay(queue: "order", priority: 2, run_at: 2.minutes.from_now).expired_message(order, canceled_partial(order))` and now is working fine :D :Thank you very much! – hyperrjas Oct 08 '12 at 16:14

1 Answers1

0

Please check my answer here:

undefined method `fragment_for' for nil:NilClass on render partial with cache

I think that could be useful.

P.S. Horrible idea, please rethink your architecture.

Community
  • 1
  • 1
Vadym Chumel
  • 1,766
  • 13
  • 20