模型继承 - 根据属性使用“where”

时间:2012-08-11 08:36:28

标签: inheritance activerecord ruby-on-rails-3.2 rails-models

我有一个用户模型和一个经销商和客户模型,它继承了用户类并且没有自己的数据库表:

class User < ActiveRecord::Base
end

class Dealer < User
  before_save :set_default_values

  def set_default_values
    self.role_id = Role.find_by_handle('dealer').id
  end
end

class Customer < User
    …
end

我不使用范围,因为我想要一个像dealer_path和每个角色的一些自定义逻辑。

现在我想知道如何告诉我的经销商/客户模型它依赖于角色,以便我可以使用(例如)Customer.all并让用户获得“客户”角色。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Rails的内置Single Table Inheritance功能。只需向User添加一个名为'type'的列,并将值设置为'dealer','customer'等。

答案 1 :(得分:0)

您不能只将默认范围应用于新类吗?

class Dealer < User
  default_scope { where(:role_id) = Role.find_by_handle('dealer').id }
  ...
end