2011-01-15 12 views
8

登録ユーザーのアカウントを作成するコールバックを追加する方法。関係アカウント(アカウントモデルはBELONGS_TOがあります:ユーザー)Rails3とDeviseの登録後にコールバックを追加する方法

工夫ファイル(registrations_controller.rb)は、コントローラの下で/ 私のユーザモデルはhas_manyのを持っているが考案されている

まず、私はどこにコールバックを追加するかわかりません(どのファイルですか?)

次に、登録ユーザーの正しいuser_idで新しいアカウントを自動的に作成するにはどうすればよいですか?

ありがとうございます。ここで

答えて

1

は、あなたの質問に答えるのGoogleグループのスレッドです:

http://groups.google.com/group/plataformatec-devise/browse_thread/thread/6fc2df8d71f8b2f0

基本的に、それはあなたが必要なコードを実行するだけで、ユーザーのモデルに標準レール「after_create」メソッドを追加することをお勧めします。

+1

は、追加のデータを処理するためには何?たとえば、ユーザーは多数のグループメンバーシップを持つことができます。ユーザーはグループの招待コードでサインアップします。ユーザーの作成時に、グループメンバーシップを作成し、招待コードを参照してグループを決定します。 – RyanW

16

デベロッパの登録コントローラを上書きし、コールバックを追加してフィルタを使用してアカウントを作成することができます。その後、あなたのroutes.rbをして、私は両方のアプローチを使用している登録

devise_for :users, controllers: { registrations: 'registrations'} 
+3

私の場合は、paramsにアクセスする必要があったので、モデルのafter_createではなく、このアプローチを使用しました。 – RyanW

+0

#attributes_for_accountメソッドを追加する必要があります。def attributes_for_account params.require(:account).permit([:name、:surname、:contact_nr])end – violentr

0

ためにオーバーライドコントローラを使用するように工夫伝える

class RegistrationsController < Devise::RegistrationsController 
    after_filter :add_account 

    protected 

    def add_account 
    if resource.persisted? # user is created successfuly 
     resource.accounts.create(attributes_for_account) 
    end 
end 
end 

registrations_controller.rbファイルに名前を付けることを忘れないでください。アクティブで送信時after_createコールバックでIは、エラー例外 ActiveJob::DeserializationError: Couldn't find User with id

を受信したので、関連データ及び(@naveed同じ)RegistrationsController

after_filter :send_notification_mailer, only: :createを生成するためのモデルで

after_create sidekiqを使ってバックグラウンドで確認メールを送るのは、ユーザーが時には永続化されなかったためです。

0

最初に、あなたのバージョンのデバイスをbundle open deviseで開きます。 app/controllers/devise/registrations_controller.rbをチェックしてください。ユーザーが正常に登録すると、createメソッドで呼び出されるメソッドが表示されます。私のバージョン(3.5.2)はsign_upです。

ルートで、あなたは

devise_for :users, :controllers => { :registrations => "registrations" } 

は、ザ・あなたがそうのような独自のRegistrationsControllerを定義することができます必要があります:あなたはparamsハッシュにアクセスする必要がある場合

class RegistrationsController < Devise::RegistrationsController  
    protected 

    def sign_up(_resource_name, user) 
    super 
    # do your stuff here 
    end 
end 
関連する問題