2012-03-04 7 views
4

この質問は何度も聞いてきましたが、私の質問はもう少し進んでいます。Rails多型ユーザモデルDeviseを使って

私のアプリケーションをモデリングするとき、ユーザーモデルに多相関連を持つ2種類のユーザーがあります。以下のような:

class User < ActiveRecord::Base 
    belongs_to :profileable, :polymorphic => true 
end 

class User_Type_1 < ActiveRecord::Base 
    has_one :user, :as => :profileable 
end 

class User_Type_2 < ActiveRecord::Base 
    has_one :user, :as => :profileable 
end 

私が代わりにSTIの、これをしなかった理由、User_Type_1は4つのフィールドのようなものを持っており、User_Type_2は20のフィールドのようなものを持っていると私はユーザテーブルは非常に多くのフィールドを持っていたくなかったからです(はい、24-ishフィールドは大したものではありませんが、私はむしろ〜20フィールドはほとんど空ではありません)

私はこの仕組みを理解しています。私の質問は、タイプUser_Type_1のユーザーにサインアップしますが、サインインフォームは両方に使用する必要があります。何とかに看板上のサイトの右側の部分にリダイレクトするために、私は私がAppicationControllerafter_sign_in_path_for(resource)オーバーライドを使用することができます知っている

を(私はUser_Type_2のユーザーを作成するアプリケーションの管理者側になります)のようなもの:。

def after_sign_in_path_for(resource) 
    case current_user.profileable_type 
    when "user_type_1" 
     return user_type_1_index_path 
    when "user_type_2" 
     return user_type_1_index_path 
    end 
end 

私の質問は、私がDeviseで作業するフォームを作成し、タイプUser_Type_1のサインアップのみを許可してsign_upの後でサインインすることです。

また、私が間違った方向に進むとすれば、正しい方法は何ですか?

答えて

5

私は自分の質問に答えることができ、同じ問題を抱えている人を助けることができるように、ここに置いています。

ログインの問題は簡単だった、ちょうど

前述したように、デフォルトの工夫のログインおよびApplicationControllerafter_sign_in_path_forを使用し、私はここにそれを入力すると、フォームの質問への答えを実現:

私は先ほど作成User のためのネストされた属性を持つUser_Type_1ための正規形と、それは次にUserType1Controller に投稿していた両方のオブジェクトを保存し、工夫

から sign_in_and_redirectヘルパーと呼ばれます
class UserType1Controller < ApplicationController 
    ... 
    def create 
     @user = User.new(params[:user]) 
     @user_type_1 = UserType1.new(params[:patron]) 
     @user.profileable = @user_type_1 
     @user_type_1.save 
     @user.save 
     sign_in_and_redirect @user 
    end 
    ... 
end 

その後、上記のafter_sign_in_path_forの方法が適切な場所に送信され、それはすべて良好でした。

関連する問題