下記の状況について多くの読書を完了しました。いくつかの意見を欲しい。レールのデビーズ登録後にアカウントを作成するためにafter_actionを使用する
(1)のスレッドで、ユーザーは「登録フォームからDeviseユーザーを作成するときに別のオブジェクトを作成する方法は?」と尋ねます。これはまさに私がやろうとしていることです。ユーザーが登録すると、私はAccountオブジェクトを作成したい。
(1)How to create another object when creating a Devise User from their registration form in Rails?
しかしまた、参照スレッドで浮上し、私が持ってきた問題が、あります。サブクラス化された登録コントローラーで以下を実行したとき。私は "属性を割り当てるとき、あなたは引数としてハッシュを渡す必要があります。" ArgumentsErrorは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 paramがaccountのuser_id外部キーに行くことを許可しようとしました。それでも同じエラー "属性を割り当てるときは、引数としてハッシュを渡す必要があります。"
def account_params
params.require(:account).permit(:user_id,:user)
end
ここで、(1)の質問が終了しました。 DeviseのRegistrationsControllerをバイパスすることを提案しました。
これは、ユーザーがDeviseに登録したときに他のモデルを作成する目的を達成する唯一の方法ですか?その他の提案はありますか?私は唯一の方法でなければ、登録コントローラをバイパスすることを約束したくありません。
他の情報を提供していただきありがとうございます。あなたのuser.rbファイルで
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
を本当に迅速な回答グラハムに感謝!私は、あなたが表示するように、しかし、それは、RegistrationsControllerのメソッドを作成し、メソッドのエラーを与えているのuser.rbをセットアップしました。 RegistrationsController#でNoMethodErrorを作成し、#の 'account = 'メソッドを定義していません。これは、上記の "@ user.account = @account"行で特に発生します。私はRegistrationsControllerにcreateメソッドを追加して@accountを割り当てようとしましたが、アカウントのパラメータにアクセスできないため、元の問題に戻ります。何を指示してるんですか? –
Jason
これは、最後のユーザーが今作成されたレコードを参照することを100%保証しますか?クエリが実行される前に別のレコードを作成できますか? – Tashows