5

我正在尝试使用 ActiveRecord 实现多表继承。看起来所有可用的宝石都很老了。我错过了什么吗?是否有任何“本机”方法可以使用 activerecord 实现这一点?我正在使用 Rails 3.2.3 和 activerecord 3.2.1

4

2 回答 2

2

Rails 6.1+ 委托类型

Rails 6.1 添加了一种“原生”方式来通过delegated type.

详情请参阅相应的 PR

通过这种方法,“超类”是一个由其自己的表表示的具体类,其中存储了所有“子类”之间共享的所有超类属性。然后每个子类都有自己的单独表,用于特定于其实现的附加属性。这类似于 Django 中所谓的多表继承,但这种方法不是实际继承,而是使用委托来形成层次结构并分担责任。

于 2020-08-05T21:07:57.393 回答
1

单表继承(每辆 Car 和 Truck 共享一个数据库)

class Vehicle < ActiveRecord
end

class Car < Vehicle
end

class Truck < Vehicle
end

在您的情况下,您不是共享数据库,而是共享功能。然后您应该编写一个模块并将其包含在每个模型中

class Car < ActiveRecord
  extend VehicleFinders
end

class Truck < ActiveRecord
  extend VehicleFinders
end

module VehicleFinders
  def find_purchased
    #...
  end
end

所以在extend模块的方法中是调用类的类方法。include模块的方法是调用类对象的实例方法

这对你来说可能是一本好书http://raysrashmi.com/2012/05/05/enhance-rails-models

于 2013-04-25T23:51:21.167 回答