使用不同格式渲染Rails动作

3

假设我有一个名为“search”的应用程序方法,我希望它能够响应AJAX请求。在我的JS视图中(app/views/application/search.js.erb),我想要呈现HTML视图:

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

我知道我可以将内容移到一个partial中,并在HTML和JS视图中呈现它,但问题是我有许多不同的操作需要以这种方式响应,我不想创建一堆只呈现partial的1行视图文件。

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


你尝试过这个吗:http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to - corroded
这个的结果是什么?我也在尝试在JS视图中使用escape_javascript(render: action_name, format => 'html')来类似地渲染HTML。 - mswieboda
请问您能否详细说明一下您的问题... 您示例中的语法略有错误。$('#content').html(escape_javascript('<%= render action: 'search', format: 'html' %>')); http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript - ChuckJHardy
2
答案是使用 :formats => ['html'] 而不是 :format => 'html'。请参见此处:https://dev59.com/b3RC5IYBdhLWcg3wUfN2。这个问题应该在较新版本的Rails中得到解决,请参见此处:https://github.com/rails/rails/issues/4841。 - Samuel
1个回答

1
我不确定将一堆HTML输出到JS源代码中是否是一个好的设计,但这不是你的问题-我曾经不得不做类似的事情,将模板渲染出的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模式中!”。

但是,如上所述,应该从JS模板呈现_partial_name.html.erb。这仍然可能不是很好的设计。

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接