2016-08-10 25 views
0

devise gemでユーザーを作成し、そのユーザーが管理者かどうかを示すブール値フィールドを割り当てました。しかし、管理者ユーザーのみを作成する方法の例は見つかりませんでした別のユーザーを登録してください。管理者のみがDevailsでRailsで新しいユーザーを作成する

私はUserControllerでの作成:

class UserController < ApplicationController 
    before_action :is_admin?, only: [:new, :create, :destroy] 

    def new_user 

    end 

    def create 

    end 


    protected 

    def is_admin? 
    if !user_signed_in? 
     redirect_to user_session_path 
    elsif !((current_user.is? :admin) & (user_signed_in?)) 
     redirect_to root_path 
    end 
    end 

end 

と私のroutesファイル:

devise_for :users, controllers: { 
     sessions: "user/sessions", 
     confirmations: 'user/confirmations', 
     passwords: 'user/passwords' } 

    get 'users/new_user' => 'user#new_user', as: :new_user 
    post 'users/create_user' => 'user#create', as: :create_user 

が、私のビューnew_user.html.erbディスプレイでこのエラー:

undefined local variable or method `resource' for #<#<Class:0x007efbcc054a78>:0x007efbe003f880> 

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

<% end %> 

答えて

0

理由このエラーでは、デバイス登録をレンダリングしようとしていますが、resource, devise_mapping...は012に初期化されていません

これらの変数はapplication_helper.rbに初期化されているため、ビューのどこにでもアクセスできます。

def resource_name 
    :user 
    end 

    def resource 
    @resource ||= User.new 
    end 

    def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
    end 
0

私はあなたが欲しいものを行うための最も簡単で慣用的な方法を工夫registrationsコントローラをオーバーライドして、カスタムサブクラスであなたのbefore_actionを追加することだと思います。こうすることで、アクセス権を持つユーザーをカスタマイズできる一方で、魔法のすべてを保持することができます。

私は、許可がアプリケーションに大きな役割を果たしている場合は、ユーザーの役割を管理するために宝石を追加することを検討かもしれないと言うだろうなどPunditCancancan

関連する問題