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 =&gt; [] 技巧,否则 Rails 会坚持“嘿,我想找到一个 js 部分名称,我们处于 js 模式 man!”。

但如上所述应该从 JS 模板渲染 _partial_name.html.erb。这可能仍然不是一个伟大的设计。

希望这会有所帮助。

【讨论】:

以上是关于Rails 以不同的格式渲染动作的主要内容,如果未能解决你的问题,请参考以下文章

如何在rails的渲染动作中传递参数

如何重用 Rails 中嵌套控制器的渲染动作?

js.erb 不在 Rails 6 中渲染

Rails - 格式和渲染 - 它们是如何工作的?

每个动作的 Rails 布局?

如何在 Rails 中动态更改格式渲染引擎?