我刚刚升级到Rails 4.1.
我之前在控制器动作中有以下内容,它完美地运行.
respond_to do |format|
format.html { render html: @user, layout: "fullscreen" }
end
Run Code Online (Sandbox Code Playgroud)
这在Rails 4.1中不起作用,页面只是呈现对象 #<User:0x007fb087429a70>
按如下方式编辑控制器可修复此错误.
respond_to do |format|
format.html
end
Run Code Online (Sandbox Code Playgroud)
在Rails 4.1中设置布局的正确方法是什么.我在文档中找不到这个问题.
htmlrender在Rails版本的方法中添加了选项4.1.请参阅此处列出的问题
当你尝试
def action_name
## ...
respond_to do |format|
format.html { render html: @user, layout: "fullscreen" }
end
end
Run Code Online (Sandbox Code Playgroud)
在Rails之前的版本v4.1,到底发生了什么被render忽视的html选项,拿起layout并径自找了命名视图action_name.html.***(这里***指的是模板处理程序一样erb,haml等).它找到了视图并进行了渲染.如果视图不存在那么你会收到一个Missing template error
当你使用相同的代码时Rails 4.1,因为方法中html允许选项,render它肯定会被处理.现在,首先您需要了解该html选项实际执行的操作:
您可以使用:html选项将HTML字符串发送回浏览器:
Run Code Online (Sandbox Code Playgroud)render html: "<strong>Not Found</strong>".html_safe
当您不想为您的操作编写html文件并希望简单地呈现HTML字符串时,可以使用此方法.
调用此特定操作的原因是您现在看到带有对象的html页面,#<User:0x007fb087429a70>因为您将值传递给html选项as @user.
按如下方式编辑控制器可修复此错误.
respond_to do |format|
format.html
end
Run Code Online (Sandbox Code Playgroud)
首先,这不是一个错误.你误解了html选项的作用.我很确定你有一个与你的动作相对应的视图,这是你期望渲染的.上面的代码为您做到了这一点.
我想你只想指定layout你的观点.你需要做的就是:
respond_to do |format|
format.html { render layout: "fullscreen" }
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |