Rails 覆盖渲染

Rails Override Render

是否可以为 :html 响应覆盖 Rails' 渲染行为?我想始终呈现相同的模板(忽略神奇的视图发现)。

我正在编写一个单页应用程序,这似乎应该是可能的...基本上,如果它被请求为 :json,它应该呈现 JSON,但如果它被请求为 :html 它应该将数据传递到相同的视图,无论如何(它将在正文中呈现为 JSON)。

尝试删除 application.html.erb 上的产量部分,然后您将始终获得没有任何部分的 application.html.erb。

如果您定义一个单独的视图,然后在每个控制器上执行每个操作后渲染该视图,会怎样?像这样:

app/controllers/home_controller.rb

class HomeController < ApplicationController
  def home
  end
end

app/views/home/home.html.erb

<!-- Whatever html code and script tags here -->

app/controllers/another_controller.rb

class AnotherController < ApplicationController
  def action
    render "home/home"
  end
end

你甚至可以定义一个 after_filter

编辑

我试过了,很管用。虽然后过滤器似乎不起作用。

为什么不将 JSON 数据作为实例变量传递?

控制器

@json_data = whatever_model.to_json

application.html.erb

<script>
<%= @json_data %>
</script>