2011-07-01 9 views
0

私はdeviseを使用していますが、Userモデルは従来のテーブルに関連しているので完全に機能します。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(...)を手で行うことができましたが、そのパスを下る前に、レールがこれに戻ることなくこれを達成する方法を提供しているかどうかを知りたいと思いますマニュアルコード。

答えて

0

OK、このアプローチはどのように醜いですが(動作するようだ):

alias :old_user_setting :user_setting 

def user_setting 
    old_user_setting || create_user_setting 
end 
+1

永遠に一人で... :) – kolrie

関連する問題