2011-07-01 122 views
0

我正在使用設計,但用戶模型與舊錶相關,因此完美地工作。執行has_one關聯

現在我想實現重置密碼的能力,並強制執行新字段(reset_password_tokenreset_password_token_at),這是我無法在原始表上創建的。

我決定用舊的delegatehas_one關係。下面是我所做的:

class User < LegacyDatabase 
    set_table_name 'T_CLIENTS' 

    devise :database_authenticatable, :authentication_keys => [:email] 
    devise :recoverable 

    has_one :user_setting 

    delegate :reset_password_token, :to => :user_setting 
    delegate :reset_password_sent_at, :to => :user_setting 

    # (...) 
end 

我現在的問題是,我需要強制執行,所有用戶必須創建UserSetting當我需要訪問新的領域。

如果我是親自動手做的,我可以做UserSetting.find_or_create_by_user_id(...),但在走下那條路之前,我想知道rails是否提供了一種方法來實現這一點,而不會回退到手動代碼。

回答

0

OK,怎麼醜是這種方法(似乎工作):

alias :old_user_setting :user_setting 

def user_setting 
    old_user_setting || create_user_setting 
end 
+1

永遠孤單... :) – kolrie