2011-07-01 126 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