I want to do something like this:
class AttachmentsController < ApplicationController def upload render :json => { :attachmentPartial => render :partial => 'messages/attachment', :locals => { :message=> @message} } end
Is there a way to do this? render a Partial inside a JSON object? thanks
This should work:
def upload render :json => { :attachmentPartial => render_to_string('messages/_attachment', :layout => false, :locals => { :message => @message }) } end
Notice the render_to_string and the underscore _
in before the name of the partial (because render_to_string doesn't expect a partial, hence the :layout => false too).
UPDATE
If you want to render html
inside a json
request for example, I suggest you add something like this in application_helper.rb
:
# execute a block with a different format (ex: an html partial while in an ajax request) def with_format(format, &block) old_formats = formats self.formats = [format] block.call self.formats = old_formats nil end
Then you can just do this in your method:
def upload with_format :html do @html_content = render_to_string partial: 'messages/_attachment', :locals => { :message => @message } end render :json => { :attachmentPartial => @html_content } end
This question is a bit old, but I thought this might help some folks.
To render an html partial in a json response, you don't actually need the with_format
helper as explained in mbillard's answer. You simply need to specify the format in the call to render_to_string
, like formats: :html
.
def upload render json: { attachmentPartial: render_to_string( partial: 'messages/attachment', formats: :html, layout: false, locals: { message: @message } ) } end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With