Как создать учетную запись, когда и назначить ее пользователю при регистрации через оформление в рельсах - PullRequest
0 голосов
/ 27 марта 2019

Как лучше всего с Clearance автоматически создавать «Аккаунт» с уникальным идентификатором account_id (необязательно UUID) и назначать его новому пользователю при регистрации?

Мне нужно продлить разрешение. Пользовательская форма регистрации и пользовательский контроллер справляются с этим, но у меня возникают проблемы с тем, чтобы заставить это работать.

Должно ли это быть before_filter при регистрации или частью действия пользователя по созданию?


Обновление: добавление кода для справки ...

# app/controllers/users_controller.rb
class UsersController < Clearance::UsersController

  def create
    @user = user_from_params
    @account = account_from_params
    @user.account = @account

    if @user.save
      sign_in @user
      redirect_back_or url_after_create
    else
      render template: "users/new"
    end
  end

end

class AccountController < ApplicationController

  def create
    @account = Account.new(account_params)
  end

  private

  def account_params
    params[:account].permit(:id)
  end

end

<fieldset>
  <%= form.label :email %>
  <%= form.text_field :email, type: 'email' %>
</fieldset>

<fieldset>
  <%= form.label :password %>
  <%= form.password_field :password %>
</fieldset>


# Users & Clearance routes
  resources :passwords, controller: 'clearance/passwords', only: [:create, :new]
  resource :session, controller: 'clearance/sessions', only: [:create]

  resources :users, controller: 'clearance/users', only: [:create] do
    resource :password,
      controller: 'clearance/passwords',
      only: [:create, :edit, :update]
  end
  get '/login' => 'clearance/sessions#new', as: 'sign_in'
  delete '/logout' => 'clearance/sessions#destroy', as: 'sign_out'
  get '/signup' => 'clearance/users#new', as: 'sign_up'
  get '/users' => 'users#index'

1 Ответ

1 голос
/ 27 марта 2019

Я бы подключился к их контролерам, чтобы, так сказать, держать вещи «в жемчужине». Вот как это работает .Похоже, вы бы подключились к контроллерам, переопределив их следующим образом:

class UsersController < Clearance::UsersController

  def create
    @user = user_from_params
    @account = account_from_params
    @user.account = @account

    if @user.save
      sign_in @user
      redirect_back_or url_after_create
    else
      render template: "users/new"
    end
  end

end

Не забудьте обновить маршруты и указать им это действие контроллера.Теперь вы как бы отцепляете действие своего контроллера create от Clearance, но вы делаете это «способом Clearance», который кажется наиболее подходящим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...