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

And*_*vey 3 ruby-on-rails

我刚刚升级到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中设置布局的正确方法是什么.我在文档中找不到这个问题.

Kir*_*rat 5

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字符串发送回浏览器:

 render html: "<strong>Not Found</strong>".html_safe
Run Code Online (Sandbox Code Playgroud)

当您不想为您的操作编写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)