2017-06-27 5 views
0

私は、Railsアプリケーションをできるだけ簡単に新しいアカウントに登録しようとしています。私はDeviseを使用しており、デフォルトのemailpassword/confirmationのフィールドを必要としています。サインアップ後にbelongs_toアソシエーションを作成します

私の目標は、ユーザがプロファイルの残りの部分を入力するポストサインアップウィザードを作成することです(Company name, address, and CC# informationを含む)。

最終的には、ユーザーはbelong_to :company、会社はhave_many :usersとなります。

私のモデルでget-goからこれらを宣言した場合、ユーザーは会社の情報を入力する必要がありますが、これは現時点では行いません。

私はユーザー情報を収集して正常にアプリケーションにログインした後、関連付けを作成するための最善の方法は何ですか?またはこれは不可能ですか?

答えて

0

可能です。あなたがまだ存在していない場合は、ユーザーモデルに特定のフィールドを追加するだけです。たとえば、ユーザーモデルには30個のフィールドがあり、最初に設定する必要があるのは2つだけです(たとえば、電子メールとパスワード)。その後、いつでも残りのフィールドを更新することができます。ユーザーは、行先からすべてのフィールドを入力する必要はありません。それはあまり実用的ではありません。

アソシエーションを作成する際に注意しなければならないのは、foreign_keysを介してモデル間にリンクがあることだけです。したがって、ユーザーは、ユーザーモデルに含まれる独自の会社キーを使用して会社にリンクします。

コードを追加したり、どこに問題がある場合は、エラーに対処するのに役立ちます。

+0

この時点で私は本当にDeviseのカスタムコードを持っていません。私はまだ「会社」オブジェクトを構築するコードを持っていません...団体の仕組みを知っているだけで、私はそれが可能なのかどうかも疑問を呈していました。最後に、ユーザー(会社にサインアップして作成する最初のユーザー)を 'account_admin'にして、その会社に所属する他のユーザーを追加することができます。 – Godzilla74

0

私の目標は、ユーザーが に会社名、住所、 及びCC番号情報が含まれるであろう彼らのプロフィールの残りの部分を、記入する場所のポストは、ウィザードを申し込む作成することです。

あなたが最後に

class DeviseOverride::ConfirmationsController < Devise::ConfirmationsController 
    def after_confirmation_path_for(resource_name, resource) 
    if resource.has_all_data? 
     sign_in resource 
     home_page_path(resource) 
    elsif resource.has_partial_data? 
     sign_in resource 
     complete_form_path(resource) 
    else 
     flash[:error] = 'Invalid request' 
     root_path 
    end 
    end 
end 
ルートで

devise_for :users, path: '', 
    path_names: { sign_up: :signup, sign_in: :login, sign_out: :logout }, 
       controllers: { 
        confirmations: 'devise_override/confirmations' 
       } 

ようDevise::ConfirmationsControllerクラスをオーバーライドすることができ、ユーザーはbelong_toう:会社と会社だろう have_many:ユーザー

確認後のフォームは、関連するユーザーにデータを保存し、それに応じてリソースを作成するコントローラにデータを送信することになっています。

P.S. May be this doc will help you

関連する問題