执行has_one关联

时间:2011-07-01 18:32:44

标签: activerecord ruby-on-rails-3.1

我正在使用设计,但用户模型与遗留表有关,所以它很好用。

现在我想实现重置密码的功能,并强制使用新字段(reset_password_tokenreset_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是否提供了一种方法来实现这一点而不会回到手册代码。

1 个答案:

答案 0 :(得分:0)

好的,这种做法多么丑陋(似乎有效):

alias :old_user_setting :user_setting

def user_setting
  old_user_setting || create_user_setting
end