首页 > 解决方案 > 如何在 Rails 中创建要继承的通用模型

问题描述

我想将我在 Rails 应用程序中的所有模型转换为使用 uuid 作为 id,如果需要,可以添加一些对我的所有模型通用的字段。为此,我正在考虑,而不是这样做:

class MyModel < ActiveRecord::Base
end

这样做

class CommonUUIDModel < ActiveRecord::Base
  some_uuid_related_information
end

class MyModel < CommonUUIDModel
end

我的问题是:我怎样才能实现这一点(应该用什么代替some_uuid_related_information,这对 Rails 应用程序来说是一个好习惯吗?

标签: ruby-on-rails

解决方案


更喜欢扩展(在模块中混合)而不是继承(子类)。

换句话说,制作一个以统一方式改变模型的模块,并将该模块包含在所有使用它的类中。

对于 ActiveRecord 支持的模型尤其如此,因为子类化通常会发出 STI(单表继承)的信号


推荐阅读