我知道application.html.erb是每个页面的默认设置。我想在用户登录时使用不同的布局.i表示登录后的仪表板应该是不同的布局而不是默认布局(application.html.erb )。
答案 0 :(得分:5)
创建新布局,例如app/views/layouts/dunno.html.erb
。在控制器中使用
class DashboardController < ApplicationController
layout 'dunno'
end
或按行动
class DashboardController < ApplicationController
def index
render layout: 'dunno'
end
end
有关详细信息,请参阅docs
答案 1 :(得分:1)
在你的application_controller.rb文件中执行此操作,希望它有所帮助。
layout :set_layout
def set_layout
if current_user
'dashboard_layout'
else
'default_layout'
end
end
答案 2 :(得分:0)
您可以在应用程序控制器中执行此操作,添加此代码,我假设您正在使用devise
layout :layout_by_resource
def layout_by_resource
user_signed_in? ? "my_custom_layout" : "application"
end
答案 3 :(得分:0)
可以找到有关布局的详细信息here。
在动作渲染调用中使用不同的布局
如果你的大多数动作使用相同的布局,那么它就非常有意义了 如上所述定义控制器范围的布局。有时你会 有一个例外,其中一个动作想要使用不同的布局 控制器的其余部分。您可以通过传递:layout来完成此操作 渲染调用的选项。例如:
class WeblogController < ActionController::Base
layout "weblog_standard"
def help
render action: "help", layout: "help"
end
end
这将覆盖控制器范围的“weblog_standard”布局,并将呈现帮助 采用“帮助”布局的行动。
答案 4 :(得分:0)
如果您使用 devise gem,并且您的目标是在 devise 控制器中使用其他布局,请查看他们的docs
答案 5 :(得分:0)
我想在登录之前和登录之后有两种不同的布局,所以我使用下面的代码实现了application_controller
如果用户是signed_in则使用不同的布局来更改布局....
如果您使用的是设计,请不要忘记在视图/布局中添加布局
layout :layout_by_resource
def layout_by_resource
unless user_signed_in?
Rails.logger.info "===========Setting layout as views/layouts/auth.html.erb"
'auth'
else
Rails.logger.info "===========Setting layout as views/layouts/blue.html.erb"
'basic'
end
end