Проделал много чтения по ситуации ниже. Хотите узнать какие-то мнения.Использование after_action для создания учетной записи после регистрации Devise для рельсов
В теме в (1) пользователь спрашивает: «Как создать другой объект при создании пользователя-разработчика из своей регистрационной формы в Rails?». Это именно то, что я пытаюсь сделать. Когда пользователь регистрируется, я хочу создать объект Account.
(1) How to create another object when creating a Devise User from their registration form in Rails?
Однако есть проблема у меня были, что также всплыли в ссылочного потоке. Когда я запускаю следующее в моем подклассовом контроллере регистрации. Я получаю: «При назначении атрибутов вы должны передать хэш в качестве аргумента». ArgumentError в RegistrationsController # create.
class RegistrationsController < Devise::RegistrationsController
after_action :create_account, only: [:create, :update]
private
def create_account
Account.create(@user)
end
end
Оказывается, что с помощью функции обратного вызова не работает, потому что у меня нет доступа к Params хэш. Я пробовал так много разных вариантов Account.create (current_user) или (@user), а также добавлял еще один def ниже, чтобы попытаться разрешить идентификатор пользователя id для внешнего ключа user_id учетной записи. Тем не менее та же ошибка «При назначении атрибутов вы должны передать хэш в качестве аргумента».
def account_params
params.require(:account).permit(:user_id,:user)
end
Здесь вопрос на (1) закончился. Он предложил обходить RegistrationsController от разработчика.
Это единственный оставшийся способ достичь цели создания других моделей, когда пользователь регистрируется в Devise? Любые другие предложения? Я не хочу соглашаться на обход контроллера регистрации, если только это не единственный способ.
Благодарим за любые предложения и с удовольствием предоставим любую другую информацию.
class Account < ApplicationRecord
has_many :users
end
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :projects
has_many :notes
belongs_to :account
Действительно ценю быстрый ответ Грэма! Я setup user.rb по мере того как вы показываете однако оно вызывает метод create в RegistrationsController и не дает никакой ошибки метода. NoMethodError в RegistrationsController # создает, а затем неопределенный метод 'account = 'для # <Пользователь: 0x00000005da1bc8>. Это специально указано в строке «@ user.account = @account», показанной выше. Я попробовал добавить метод create в RegistrationsController и присвоить @account, но затем вернусь к исходной проблеме, потому что я не могу получить доступ к параметрам учетной записи. Что ты предлагаешь? – Jason
Это 100% гарантия того, что последний пользователь будет ссылаться на только что созданную запись? Можно ли создать еще одну запись до запуска этого запроса? – Tashows