Rails 以不同的格式渲染动作
Posted
技术标签:
【中文标题】Rails 以不同的格式渲染动作【英文标题】:Rails Render Action With Different Format 【发布时间】:2011-09-26 07:16:36 【问题描述】:假设我有一个 application#search 方法,我想响应 AJAX 请求。在我的 JS 视图 (app/views/application/search.js.erb) 中,我想渲染 html 视图:
$("#content").html( escape_javascript( render( :action => 'search', :format => 'html' ) ) );
$("#title").html( "Title" );
我知道我可以将内容移动到部分并在 HTML 和 JS 视图中呈现,但问题是我有许多不同的操作需要以这种方式响应,我不想创建一堆 1 - 仅呈现部分的行视图文件。
有什么方法可以显式地呈现具有特定格式的动作并同时获取 content_for 的不同部分?因此,对于上面的示例,我可以将 #title 设置为使用 content_for :title 或其他内容返回的 HTML。
【问题讨论】:
你试过这个吗:apidock.com/rails/ActionController/MimeResponds/InstanceMethods/… 这样做的结果是什么?我也在尝试在 JS 视图中使用escape_javascript( render :action_name, :format => 'html' )
类似地呈现 html
能否请您稍微扩展一下您的问题...您示例中的语法略有错误。 $('#content'). html(escape_javascript('<%= render action: 'search', format: 'html' %>'));
api.rubyonrails.org/classes/ActionView/Helpers/…
答案是使用:formats => ['html']
而不是:format => 'html'
。请参阅此处:***.com/questions/339130/… 这应该在较新版本的 rails 中修复,请参阅此处:github.com/rails/rails/issues/4841
【参考方案1】:
我不确定将一堆 HTML 输出到 JS 源代码是一个很好的设计,但这不是你的问题——我不得不做类似的事情来将模板渲染的 HTML sn-ps 输出到 XML ,我认为这更合理:)。
无论如何,您的问题中有几件事。
它随着 Rails 的版本而变化,但在 Rails 4.x 中,我认为这应该可以工作,你很接近,但由于某种原因它需要:formats
(复数)和数组。在您的示例中还有一些其他不相关的事情不正确,例如需要 ERB
var str = "<%= escape_javascript( render( :partial => 'partial_name', :formats => ['html'] ) ) %>";
我想。我自己还没有尝试过。
请注意,这仍然是部分内容。你想从另一个模板中渲染一个完整的(不是部分的)模板——我很确定 Rails 不会让你这样做。之前我也觉得有点烦。但实际上,即使要从 JS 部分渲染 HTML 部分(“something.html.erb”),您也需要使用 :formats => []
技巧,否则 Rails 会坚持“嘿,我想找到一个 js 部分名称,我们处于 js 模式 man!”。
但如上所述应该从 JS 模板渲染 _partial_name.html.erb。这可能仍然不是一个伟大的设计。
希望这会有所帮助。
【讨论】:
以上是关于Rails 以不同的格式渲染动作的主要内容,如果未能解决你的问题,请参考以下文章