【问题标题】:How to bypass layout for sign_in in rails application如何在rails应用程序中绕过sign_in的布局
【发布时间】:2014-08-14 05:35:08
【问题描述】:

我正在为我的所有应用程序页面使用一个通用布局文件。但我只想为sign_in 页面包含不同的布局。我怎样才能实现它?

【问题讨论】:

标签: ruby-on-rails ruby layout


【解决方案1】:

试试这个:

假设您有一个用于登录操作的会话控制器

这里的 'other_layout' 是 app/views/layouts 目录中的布局

class SessionsController < ApplicationController
  layout "other_layout", only: [:sign_in]

  def sign_in

  end
end

【讨论】:

  • 不错的答案 - 我 +1 了!
  • 我没有任何会话控制器。
  • @Randhir,那么哪个控制器用于登录?
【解决方案2】:

设计

如果您使用Devise(根据您的问题不太可能判断,但无论如何都会有人感兴趣) - 您可能想要使用devise_controller? 助手

你可以这样使用它:

#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
    layout :set_layout

    private

    def set_layout
        devise_controller? ? "devise" : "application"
    end
end

【讨论】:

  • 感谢 Rich 它在登录页面上工作。但是当我打开我的应用程序的主页时,它显示错误 Missing template layouts/login 你能告诉我我做错了什么吗?
  • 嗯嗯嗯很有趣。您还有其他布局方法来单独设置布局吗?此外,当您提到您正在使用 sign_in 操作时 - 这是您创建的自定义操作,还是您对 `Sessions¬ 控制器的 create 操作的术语?
  • 我在 /views/layout 中有两个布局文件,一个是 application.html.erb,另一个是 devise.html.erb。
  • 好的,但这不能解释错误 - 应用程序正在尝试调用 layouts/login.html.erb - 我们需要知道原因和位置
  • 嘿 Rich,我想如果你想像上面那样做,只需“创建 layout/devise.html.erb”文件,设备会自动选择这个作为设计控制器的布局。
猜你喜欢
  • 2012-03-22
  • 2011-05-31
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多