Activerecord 强制执行一个有一个关联

Activerecord 强制执行一个有一个关联,activerecord,ruby-on-rails-3.1,Activerecord,Ruby On Rails 3.1,我正在使用Desive,但用户模型与遗留表相关,因此非常好,可以完美地工作 现在,我想实现重置密码的功能,并强制具有新字段(reset\u password\u token和reset\u password\u token\u at),我无法在原始表上创建这些字段 我决定使用好的委托和有一个关系。以下是我所做的: class User < LegacyDatabase set_table_name 'T_CLIENTS' devise :database_authenticata

我正在使用Desive,但用户模型与遗留表相关,因此非常好,可以完美地工作

现在,我想实现重置密码的功能,并强制具有新字段(
reset\u password\u token
reset\u password\u token\u at
),我无法在原始表上创建这些字段

我决定使用好的
委托
有一个关系。以下是我所做的:

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
class用户[:email]
设计:可回收
有一个:用户设置
委托:重置密码\u令牌,:to=>:用户\u设置
委托:重置密码发送地址::至=>:用户设置
# (...)
终止
我现在的问题是,我需要强制所有用户在需要访问新字段时创建一个UserSetting


如果我是手工操作的话,我可以进行用户设置。通过用户id(…)查找或创建,但在开始之前,我想知道rails是否提供了一种方法来实现这一点,而不必返回手动代码。

好的,这种方法有多难看(似乎有效):

alias :old_user_setting :user_setting

def user_setting
  old_user_setting || create_user_setting
end