【发布时间】:2015-06-18 16:31:15
【问题描述】:
我有 3 个模型
# generic one
class Someone < ActiveRecord::Base
end
# customer
class Customer < Someone
has_and_belongs_to_many :groups, join_table: "some_join_table", class_name: "Group"
end
# custom group
class Group < GenericGroup
has_and_belongs_to_many :customers, join_table: 'some_join_table', class_name: "Customer"
end
让我们假设数据库已被馈送。
当我执行命令Customer.first.groups 时,我将得到具有正确结果的侄女数组 ([])。当我尝试在 Someone 模型上执行相同操作时,什么都不会发生,但是当我尝试执行此反向操作时,会发生“魔术”
Group.first.customers
#=> [<Someone..>]
如何强制 has_and_belongs_to_many 返回正确版本的 Customer 类?
【问题讨论】:
-
someones表是否有type:string列? -
没有。这不是性病。只是正常的继承。
-
这样做的目的是什么?除了桌子之外,您实际上是否从
Someone继承了任何东西?如果没有,您可以将Customer指向同一个表并从ActiveRecord::Base继承,如果您想要相同数据的不同形式。 -
Someone逻辑在几个应用程序之间共享,客户是一种特殊情况。可能我可以制作包含一些共享方法的模块并将其包含在这两个模型中,但这仍然不能解释为什么会发生这种情况。 -
我认为 HasAndBelongsToMany 创建了一些元模型并设置了错误的关系类。因为当我从 GenericGroup 中删除关系时(我之前没有提到 :() 一切正常。
标签: ruby-on-rails ruby ruby-on-rails-3 activerecord