0

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'
4

1 回答 1

1

可以这么说,我会连接到他们的控制器以保持“在宝石中”的东西。这就是它的工作原理。看起来你会通过像这样覆盖它们来连接控制器:

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

不要忘记更新路由并将它们指向此控制器操作。现在,您正在从 Clearance 中解开您的控制器create操作,但您正在以一种似乎最合适的“Clearance 方式”进行操作。

于 2019-03-27T16:19:23.870 回答