Rails - Как добавить дополнительное значение столбца в таблицу регистрации Devise? - PullRequest
0 голосов
/ 17 января 2019

Модель пользователя

class User < ApplicationRecord
  belongs_to :tenant, dependent: :destroy
end

Модель арендатора

class Tenant < ApplicationRecord
    has_many :users
end

Контроллер

Обходной путь 1 (не работает)

def create
    super

    @tenant = Tenant.new
    @user = @tenant.build_user(params)
    @tenant.save
end

Обходной путь 2 (не работает)

def create
    @tenant = Tenant.new
    @user = User.build(params)
    @tenant.save

    super

end

Есть ли возможность передать параметр для разработки суперкласса?

Поскольку метод Devise super имеет свои собственные функции для регистрации пользователя / хеширования пароля /, я не могу полностью переопределить функцию.

Я знаю, что сбережения неверны, пожалуйста, предложите мне лучший подход.

Фактический исходный код:

(с добавлением файлов Controller, Model, Migrations и Routes.)

https://repl.it/@aravin/HarmlessRepentantHarddrive

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Я хотел бы дать более подробный ответ, чем был предоставлен AbM .

  1. Вы можете создать файл registrations_controller.rb с помощью следующей команды:

    rails g devise:controllers users -c=registrations

  2. Как только вы это сделаете, вы захотите изменить его так, чтобы у вас было что-то вроде:

    class RegistrationsController < Devise::RegistrationsController
        private
    
        def sign_up_params
            params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
        end
    
        def account_update_params
            params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
        end
    end
    
  3. Затем в вашем файле rout.rb вы захотите изменить строку devise_for, чтобы сообщить devise, что вы хотите переопределить свой контроллер регистрации, например:

    devise_for :users, controllers: { registrations: 'users/registrations' }

    Конечно, вы захотите заменить: user /: users ссылки на имя вашей модели аутентификации devise, если вы используете в моем примере что-то отличное от обычного пользователя.

Вот ссылка на это в официальных документах на GitHub .

0 голосов
/ 18 января 2019

Вы можете переопределить sign_up_params в вашем контроллере:

class RegistrationsController < Devise::RegistrationsController

  private

  def sign_up_params    
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation...).merge({tenant_id: Tenant.create!.id})
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...