使用datetime列的单表继承

时间:2014-02-17 19:46:44

标签: ruby ruby-on-rails-3

我有一个用户类,它将处理我们数据库中的已注册和未注册用户。我倾向于使用带有UnRegisteredUser和RegisteredUser子类的STI,但我觉得这是在我的代码中添加一些重复,而这并不是必需的。

现在我正在计划广告“type”和“registered_at”列。我真正需要的是根据用户是否在“registered_at”中包含日期时间来定义用户。

Users
  t.string   "type"
  t.datetime "registered_at"

这似乎不适合Rails STI惯例,但似乎它可以减轻一些不必要的重复。这是否有意义,我将如何将其构建到我的用户模型中?

1 个答案:

答案 0 :(得分:2)

为什么不直接使用范围?

scope :unregistered, lambda { where(:registered_at => nil) }
scope :registered, lambda { where("registered_at is not null") }

并使用它们:

User.registered.first

修改

您的子类可以继承User并使用default_scope,例如:

class UnregisteredUser < User

  default_scope { unregistered }

  # callbacks, etc.

end