2016-12-12 4 views
1

Я создаю приложение, в котором только учетные записи администратора могут создавать новые учетные записи пользователей. Я использую приложение 4.2 для аутентификации и cancancan для авторизации с помощью рельсов 4.2.6. Моя проблема в том, что новые пользователи не создаются, и я не получаю сообщений об ошибках, поэтому не знаю, что происходит. Мой контроллер регистрации:Разработка новых пользователей не сохранена

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

Похоже, ваша цель - позволить пользователю администратора создавать пользователей. В этом случае вам необходимо создать пользователя, а не зарегистрироваться. Это означает, что в одном из ваших методов контроллера (вероятно, в UsersController) вы бы что-то вроде:

def create 
    @user = User.create params 
end 

При создании новой Регистрации в Users::RegistrationsController, это означает, что вы пытаетесь зарегистрироваться в качестве нового пользователя, но поскольку вы уже вошли в систему, разработчик предотвращает это.