0

現在のユーザーが管理者であるかどうかに基づいてレイアウトを変更したいと考えています。そのため、現在のユーザーが管理者であるかどうかを確認する簡単なメソッドを作成し、アプリケーション コントローラーでそのメソッドを呼び出します。次のエラーが発生し続けます。

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

これをどのように行う必要がありますか?

ありがとう

4

1 に答える 1

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

編集:おそらく役立つリンク:

于 2012-12-13T05:05:35.773 に答える