Ruby on rails Activerecord默认\u作用域在模型之间溢出

Ruby on rails Activerecord默认\u作用域在模型之间溢出,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有3个类使用相同的数据库: class Enum < AR:Base self.table_name = 'enums' end class Language < AR:Base self.table_name = 'enums' default_scope where(category: Category.find_by_name('language')) end class Region < AR:Base self.table_name = 'enu

我有3个类使用相同的数据库:

class Enum < AR:Base
  self.table_name = 'enums'
end

class Language < AR:Base
  self.table_name = 'enums'
  default_scope where(category: Category.find_by_name('language'))
end

class Region < AR:Base
  self.table_name = 'enums'
  default_scope where(category: Category.find_by_name('region'))
end
案例2

united_states = Region.create(label: 'US')
united_states.category.name == 'region' #false !!!
当我单独测试案例1和案例2时,它们工作得很好,但是当我背靠背运行它们时,一些电线交叉了,美国类别变成了“语言”。这两个类是如何相互作用的。这是什么原因造成的?这是activerecord中的一个bug,还是我在这里做错了什么


注意:我也在使用activerecord 4.2,为什么不使用STI呢?()@BradWerth我读到不鼓励使用默认范围,但我认为这是为数不多的几个应该有用的案例之一,因为我实际上一直希望在每种情况下都应用范围。@PhilipHallstrom我认为STI在我的用例中不会很好地工作,因为STI需要使用类型列来告诉AR哪些数据库记录映射到哪个类,而不是此列,我的数据使用一个单独的分类表来说明每个记录是什么。此外,我的数据有许多类别,~10,它们通过Enum类进行交互,但只有两个特殊类别,区域和语言,它们通过各自的专用类进行交互。我仍然可以在这种情况下添加一个类型列,但是我会部分复制类别数据。
united_states = Region.create(label: 'US')
united_states.category.name == 'region' #false !!!