我有一个用户类,它将处理我们数据库中的已注册和未注册用户。我倾向于使用带有UnRegisteredUser和RegisteredUser子类的STI,但我觉得这是在我的代码中添加一些重复,而这并不是必需的。
现在我正在计划广告“type”和“registered_at”列。我真正需要的是根据用户是否在“registered_at”中包含日期时间来定义用户。
Users
t.string "type"
t.datetime "registered_at"
这似乎不适合Rails STI惯例,但似乎它可以减轻一些不必要的重复。这是否有意义,我将如何将其构建到我的用户模型中?
答案 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