使用application_controller.rb中的appliciaton_controller.rb中定义的方法

时间:2012-12-13 05:00:40

标签: ruby-on-rails ruby

我想根据当前用户是否为管理员来更改布局。所以我做了一个简单的方法来检查当前用户是否是admin,然后我在应用程序控制器中调用该方法。我一直收到以下错误:

undefined method `is_admin?' for ApplicationController:Class

我的代码如下所示:

class ApplicationController < ActionController::Base
  protect_from_forgery

  helper_method :current_user, :is_admin?


  if is_admin?
   layout 'admin'
  end

  .....

  protected

  .....

  def is_admin?
    if current_user.user_role == 'admin'
      return true
    end
  end

end

我该怎么做?

由于

1 个答案:

答案 0 :(得分:1)

当前的方式,在加载类时运行is_admin?,并且它在类范围内执行(因此它不是类方法,因此是异常)。您需要在请求过程中检查实例方法中的管理状态。

要执行您要执行的操作,您可以让布局调用实例方法,例如

layout :determine_layout

protected

# return "admin" for the layout if `is_admin?`, otherwise "application"
def determine_layout
  is_admin? ? 'admin' : 'application'
end

编辑:一些可能有用的链接: