我想要做类似这样的事情:
class AttachmentsController < ApplicationController
def upload
render :json => { :attachmentPartial => render :partial => 'messages/attachment', :locals => { :message=> @message} }
end
有没有办法在JSON对象中呈现Partial(部分视图)? 谢谢
我想要做类似这样的事情:
class AttachmentsController < ApplicationController
def upload
render :json => { :attachmentPartial => render :partial => 'messages/attachment', :locals => { :message=> @message} }
end
有没有办法在JSON对象中呈现Partial(部分视图)? 谢谢
这应该可以运行:
def upload
render :json => { :attachmentPartial => render_to_string('messages/_attachment', :layout => false, :locals => { :message => @message }) }
end
请注意在部分名称之前的render_to_string和下划线_
(因为render_to_string不期望部分,因此也有:layout => false)。
更新
如果您想在json
请求中呈现html
,我建议您在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
那么您可以在您的方法中这样做:
def upload
with_format :html do
@html_content = render_to_string partial: 'messages/_attachment', :locals => { :message => @message }
end
render :json => { :attachmentPartial => @html_content }
end
.html
后缀到部分路径之后才为我找到了部分内容,我认为这可能是因为默认情况下它使用了json格式。 - Noz这个问题有点老,但我认为这可能对一些人有所帮助。
要在 json 响应中呈现一个 html 部分,您实际上不需要像 mbillard 的答案中解释的那样使用 with_format
辅助函数。您只需在调用 render_to_string
时指定格式,如 formats::html
。
def upload
render json: {
attachmentPartial:
render_to_string(
partial: 'messages/attachment',
formats: :html,
layout: false,
locals: { message: @message }
)
}
end
format.json {
html_content = render_to_string(partial: 'admin/pages/content', locals: { page: @page }, layout: false, formats: [:html])
render json: { attachmentPartial: html_content }
}