【问题标题】:Enforcing a has_one association强制执行 has_one 关联
【发布时间】:2011-07-01 18:32:44
【问题描述】:

我正在使用 devise,但 User 模型与旧表相关,因此可以完美运行。

现在我想实现重置密码的功能,并强制使用新字段(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 是否提供了一种方法来完成此操作而无需退回到手动代码。

【问题讨论】:

    标签: activerecord ruby-on-rails-3.1


    【解决方案1】:

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

    alias :old_user_setting :user_setting
    
    def user_setting
      old_user_setting || create_user_setting
    end
    

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多