【问题标题】:Model inheritance – use 'where' depending on attribute模型继承——根据属性使用“where”
【发布时间】:2012-08-11 08:36:27
【问题描述】:

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

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 并获得具有“客户”角色的用户。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗯,是的,但我有一个角色模型并将用户的角色存储为 role_id。所以我需要类似 STI 的东西,带有 role_id:integer 而不是 type:string。
      猜你喜欢
      • 2011-11-25
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2012-02-09
      • 2011-05-14
      相关资源
      最近更新 更多