2012-03-04 76 views
4

所以我知道這個問題已經問了很多次,但我的問題進一步了一點。Rails多態用戶模型與設計

建模我的應用程序時,我有兩種類型的用戶與用戶模型具有多態關聯。如:

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 

我之所以這樣做,而不是性病,是因爲User_Type_1有類似4場和User_Type_2有像20場,我不希望用戶表中有這麼多的領域(是24-ish領域不是很多,但我寧願大部分時間都沒有~20場空)

我明白這是如何工作的,我的問題是我想要註冊表單隻用於註冊類型爲User_Type_1的用戶,但要同時使用兩種形式的登錄。 (我有這將創造的User_Type_2用戶應用的管理方)

我知道我可以使用after_sign_in_path_for(resource)覆蓋在AppicationController莫名其妙地重定向到該網站的右側部分上的標誌的東西,如:。

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_Type_1與嵌套屬性爲User ,把它發佈到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方法發送它到正確的地方,它都很好。