Rails渲染不同格式的动作

时间:2011-06-30 20:15:27

标签: ruby-on-rails ruby actionview

假设我有一个应用程序#搜索方法,我想响应AJAX请求。在我的JS视图(app / views / application / search.js.erb)里面我想呈现HTML视图:

$("#content").html( escape_javascript( render( :action => 'search', :format => 'html' ) ) );
$("#title").html( "Title" );

我知道我可以将部分内容转移到HTML和JS视图中进行部分渲染,但问题是我有许多不同的操作需要以这种方式响应而且我不想创建一堆1 -line视图只呈现部分文件。

有没有办法显式呈现具有特定格式的动作并抓住content_for的不同部分?因此,对于上面的示例,我可以将#title设置为使用content_for:title或其他内容返回的HTML。

1 个答案:

答案 0 :(得分:1)

我不确定在JS源代码中输出一堆HTML是一个很棒的设计,但这不是你的问题 - 而且我必须做类似的事情来将模板呈现的HTML片段输出到XML中,我认为更合理:)。

无论如何,你的问题有几件事。

它从Rails的版本变为版本,但在Rails 4.x中,我认为这应该有用,你很接近,但由于某种原因它需要:formats(复数)和数组。并且在您的示例中还有其他一些不相关的内容,例如需要ERB<%=标记,并将javascript字符串放入引号中。

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。这仍然可能不是一个伟大的设计。

希望这有帮助。