【问题标题】:has_and_belongs_to_many loads wrong resourcehas_and_belongs_to_many 加载错误的资源
【发布时间】: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


【解决方案1】:

我找到了这篇博文 http://blog.flatironschool.com/why-you-dont-need-has-and-belongs-to-many/ 并决定将HABTM 关系更改为has_many through。更改后一切正常。

【讨论】:

  • 链接变旧并停止工作。总结链接的内容,以便子孙后代也能受益。
猜你喜欢
  • 2012-12-06
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多