我刚刚升级到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中设置布局的正确方法是什么。我在文档中找不到这个。
答案 0 :(得分:5)
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