我正在使用设计,但用户模型与遗留表有关,所以它很好用。
现在我想实现重置密码的功能,并强制使用新字段(reset_password_token
和reset_password_token_at
),这是我无法在原始表上创建的。
我决定使用与delegate
关系良好的旧has_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 :(得分:0)
好的,这种做法多么丑陋(似乎有效):
alias :old_user_setting :user_setting
def user_setting
old_user_setting || create_user_setting
end