2011-07-01 4 views
0

J'utilise un concept mais le modèle User est lié à une table héritée et il fonctionne parfaitement.Mise en place d'une association has_one

Maintenant, je veux mettre en œuvre la possibilité de réinitialiser les mots de passe, et cela impose d'avoir de nouveaux champs (reset_password_token et reset_password_token_at), que je ne peux pas créer sur la table d'origine. J'ai décidé d'utiliser le bon vieux delegate avec une relation has_one. Voici ce que je l'ai fait:

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 

Mon problème est maintenant que je dois faire respecter que tous les utilisateurs auront un UserSetting créé quand j'ai besoin pour accéder aux nouveaux champs.

Si je le faisais à la main, je pourrais faire le UserSetting.find_or_create_by_user_id (...), mais avant d'aller dans cette direction, je voudrais savoir si les rails offrent un moyen d'y parvenir sans tomber code manuel.

Répondre

0

OK, laid est cette approche (semble fonctionner):

alias :old_user_setting :user_setting 

def user_setting 
    old_user_setting || create_user_setting 
end 
+1

toujours seul ... :) – kolrie

Questions connexes