为某些动作设置布局?

Arc*_*ath 18 ruby-on-rails

我的app/views/layouts文件夹如下所示:

application.html.erb
user_sessions.html.erb
errors.html.erb
Run Code Online (Sandbox Code Playgroud)

这些工作正常,我对它们没有任何问题但是id现在想要为提示添加新的布局,但仅限于索引和show动作.

"tips.index.html.erb"会起作用吗?

dtt*_*101 38

添加一个名为'tips.html.erb'的新布局

在提示控制器中添加以下内容:

layout "tips", :only => [ :index, :show ]
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令指定特定操作的布局:

def new 
    render(:layout => "layouts/application")
end
Run Code Online (Sandbox Code Playgroud)

我从未尝试在控制器中使用多个布局声明.可能是添加另一个

layout "standard", :only => [ :new, :edit ] 
Run Code Online (Sandbox Code Playgroud)

可能会工作......

  • 值得一提的是,您可以_不_在控制器中多次调用`layout`,因为只会评估最后一次调用。相反(至少在 rails 4 中),您可以调用 `layout` 传递一个方法的符号。然后该方法可以动态返回不同的模板名称。参见[布局](http://api.rubyonrails.org/classes/AbstractController/Layouts/ClassMethods.html#method-i-layout)。 (2认同)

Siw*_*申思维 6

如果要在控制器中使用多个布局,请使用以下代码:(action_name是可以直接在Rails中使用的预定义变量)

class OrdersController < BaseController
  layout :determine_layout

private
  def determine_layout
    %w(new).include?(action_name) ? "some_layout" : "public"
  end
end
Run Code Online (Sandbox Code Playgroud)

请参阅:https://stackoverflow.com/a/5525014/445908