2016-12-12 25 views
1

管理者アカウントだけで新しいユーザーアカウントを作成できるアプリケーションを構築しています。私は認証のためにdevise 4.2を使い、レール4.2.6で許可するためにcancancanを使用しています。私の問題は、新しいユーザーが作成されていないことです。エラーメッセージが表示されないため、何が問題になるのかという手がかりがありません。 マイ合わせコントローラ:新しいユーザーを作成しないでください。

class Users::RegistrationsController < Devise::RegistrationsController 
    before_action :configure_sign_up_params, only: [:create] 
    before_action :configure_account_update_params, only: [:update] 
    #before_action :authorize_admin, only: [:create, :new, :destroy] 
    before_action :authenticate_user! 
    load_and_authorize_resource 

    # GET /resource/sign_up 
    def new 
    super 
    end 

    # POST /resource 
    def create 
    build_resource(sign_up_params) 

    resource.save 
    yield resource if block_given? 
    if resource.persisted? 
     if resource.active_for_authentication? 
     set_flash_message! :notice, :signed_up 
     #sign_up(resource_name, resource) 
     respond_with resource, location: after_sign_up_path_for(resource) 
     else 
     set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}" 
     expire_data_after_sign_in! 
     respond_with resource, location: after_inactive_sign_up_path_for(resource) 
     end 
    else 
     clean_up_passwords resource 
     set_minimum_password_length 
     respond_with resource 
    end 
    end 

    # GET /resource/edit 
    def edit 
    super 
    end 

    # PUT /resource 
    def update 
    super 
    end 

    # DELETE /resource 
    def destroy 
    super 
    end 

    def cancel 
    super 
    end 

    protected 

    def configure_sign_up_params 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 
    end 

    def configure_account_update_params 
    devise_parameter_sanitizer.permit(:account_update, keys: [:name]) 
    end 

    def after_sign_up_path_for(resource) 
    super(resource) 
    end 

    def after_inactive_sign_up_path_for(resource) 
    super(resource) 
    end 
end 

マイビュー:

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

    <div class="field"> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    </div> 

    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email%> 
    </div> 

    <div class="field"> 
    <%= f.label :password %> 
    <% if @minimum_password_length %> 
    <em>(<%= @minimum_password_length %> characters minimum)</em> 
    <% end %><br /> 
    <%= f.password_field :password, autocomplete: "off" %> 
    </div> 

    <div class="field"> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %> 
    </div> 

    <div class="actions"> 
    <%= f.submit "Sign up" %> 
    </div> 
<% end %> 

<%= render "devise/shared/links" %> 

は、私は「あなたはすでにログインしている」と言っフラッシュメッセージを得ていたので、私はアカウントの作成時に、新規ユーザーでサイン行をコメントアウト管理者としてログインしているときに新しいユーザーを作成すると、これが新しいユーザーが保存されていない理由であると私を信じさせました。これは間違っているように見えますが、新しいユーザーを作成しようとすると、同じことを言っているフラッシュメッセージがまだ表示されています。どんな助けもありがとうございます。

答えて

0

あなたの目標は、管理ユーザーがユーザーを作成できるようにすることです。その場合、実際に登録するのではなく、ユーザーを作成する必要があります。 、あなたはUsers::RegistrationsControllerに新しい登録を作成すると、それはあなたが新しいユーザーとして登録しようとしている意味

def create 
    @user = User.create params 
end 

:これはあなたのようなものを持っているでしょう(おそらくUsersControllerに)お使いのコントローラのいずれかの方法で、意味します既にサインインしているので、それを防ぐことができます。

関連する問題