Dashboard Controller で Devise を使用してユーザー、管理者、エージェントをブロックしようとしています - 次のエラーが表示されます:
DashboardController:Class の未定義のローカル変数またはメソッド「current_admin」
class DashboardController < ApplicationController
if current_admin.present?
before_filter :blocked_admin?
elsif current_agent.present?
before_filter :blocked_agent?
elsif current_user.present?
before_filter :blocked_user?
end
def blocked_admin?
if current_admin.present? && current_admin.blocked_admin?
sign_out current_admin
redirect_to root_path, :notice => "This account has been Blocked - Please Contact Admin"
end
end
def blocked_agent?
if current_agent.present? && current_agent.blocked_agent?
sign_out current_agent
redirect_to root_path, :notice => "This account has been Blocked - Please Contact Admin"
end
end
def blocked_user?
if current_user.present? && current_user.blocked_user?
sign_out current_user
redirect_to root_path, :notice => "This account has been Blocked - Please Contact Admin"
end
end
end
私はレールを初めて使用します。(DRY) コードを最適化する最良の方法は何ですか。そして、私が上で述べたエラーを乗り切るために。
私もこれをやろうとしていますが、別の方法で「アプリケーションコントローラー」に配置しました。この行を削除する前に発生するエラー:
redirect_to root_path, :notice => "This account has been Blocked - Please Contact Admin"
このアクションでレンダリングやリダイレクトが複数回呼び出されました。render または redirect のみを呼び出すことができ、アクションごとに最大 1 回しか呼び出せないことに注意してください。また、redirect も render もアクションの実行を終了しないことに注意してください。したがって、リダイレクト後にアクションを終了する場合は、「redirect_to(...) and return」のようなことを行う必要があります。
この行を削除した後
redirect_to root_path, :notice => "This account has been Blocked - Please Contact Admin"
TrueClass:Class の未定義のメソッド `model_name'
def after_sign_in_path_for(resource)
if resource.is_a?(Admin) && resource.blocked_admin?
sign_out current_admin
redirect_to root_path, :notice => "This account has been Blocked - Please Contact Admin"
elsif resource.is_a?(Agent) && resource.blocked_agent?
sign_out current_agent
redirect_to root_path, :notice => "This account has been Blocked - Please Contact Admin"
elsif resource.is_a?(Agent) && resource.blocked_agent?
sign_out current_user
redirect_to root_path, :notice => "This account has been Blocked - Please Contact Admin"
else
#super
"/dashboard"
end
end