在Rails 4.1中更改了控制器操作特定布局

时间:2014-05-02 19:52:31

标签: ruby-on-rails

我刚刚升级到Rails 4.1。

我之前在控制器操作中有以下操作,它完美地运行。

respond_to do |format|
  format.html { render html: @user, layout: "fullscreen" }
end

这在Rails 4.1中不起作用,页面只是呈现对象#<User:0x007fb087429a70>

按如下方式编辑控制器可修复此错误。

respond_to do |format|
  format.html
end

在Rails 4.1中设置布局的正确方法是什么。我在文档中找不到这个。

1 个答案:

答案 0 :(得分:5)

在Rails版本html的{​​{1}}方法中添加了

render选项。请参阅列出的问题 here

当你尝试

4.1

def action_name ## ... respond_to do |format| format.html { render html: @user, layout: "fullscreen" } end end 之前的Rails版本中,真正发生的是v4.1忽略了render选项,选择html并继续查看对于名为layout的视图(其中action_name.html.***引用模板处理程序,如***erb等)。它找到了视图并进行了渲染。如果视图不存在,那么您将收到haml

当您在Missing template error中使用相同的代码时,由于Rails 4.1方法中允许使用html选项,因此肯定会对其进行处理。现在,首先您需要了解render选项实际执行的操作:

  

您可以使用:html将HTML字符串发送回浏览器   渲染选项:

html

如果您不想为操作编写html文件,希望简单地呈现HTML字符串,则使用此

调用此特定操作的原因是您现在看到一个包含对象 render html: "<strong>Not Found</strong>".html_safe 的html页面,因为您将值#<User:0x007fb087429a70>选项传递给html

  

按如下方式编辑控制器可修复此错误。

@user

首先,这不是一个错误。您误解了respond_to do |format| format.html end 选项的作用。我很确定你有一个与你的动作相对应的视图,这是你期望渲染的。上面的代码为您做到了这一点。

我想你只想为你的观点指定html。您所需要做的就是:

layout