如何在轨道上的ruby中为不同的页面使用不同的布局?

时间:2015-04-01 14:54:30

标签: ruby-on-rails ruby

我知道application.html.erb是每个页面的默认设置。我想在用户登录时使用不同的布局.i表示登录后的仪表板应该是不同的布局而不是默认布局(application.html.erb )。

6 个答案:

答案 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则使用不同的布局来更改布局.... 如果您使用的是设计,请不要忘记在视图/布局中添加布局

在application_controller.rb中

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