2016-05-31 2 views
2

Проделал много чтения по ситуации ниже. Хотите узнать какие-то мнения.Использование 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 

ответ

1

В файле user.rb, вы можете сделать это:

after_create :create_account 

def create_account 
    @user = User.last 
    @account = Account.new 
    @user.account = @account 
    @user.save 
    @account.save 
end 
+0

Действительно ценю быстрый ответ Грэма! Я setup user.rb по мере того как вы показываете однако оно вызывает метод create в RegistrationsController и не дает никакой ошибки метода. NoMethodError в RegistrationsController # создает, а затем неопределенный метод 'account = 'для # <Пользователь: 0x00000005da1bc8>. Это специально указано в строке «@ user.account = @account», показанной выше. Я попробовал добавить метод create в RegistrationsController и присвоить @account, но затем вернусь к исходной проблеме, потому что я не могу получить доступ к параметрам учетной записи. Что ты предлагаешь? – Jason

+0

Это 100% гарантия того, что последний пользователь будет ссылаться на только что созданную запись? Можно ли создать еще одну запись до запуска этого запроса? – Tashows

 Смежные вопросы

  • Нет связанных вопросов^_^