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>
是否可以为 :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>