has_many的源reflection错误:通过

我正在尝试创建一个系统,我的网站的用户可以在其中collections页面。 这些页面有两种类型,俱乐部或体育。 所以,我有四个模型,相关联:

用户模型:

class User  :favorites has_many :clubs, :through => :favorites .. end 

collections夹型号:

 class Favorite  true end 

俱乐部型号:

 class Club  :favoritable has_many :users, :through => :favorites def to_param slug end end 

运动模型:

 class Sport  :favoritable has_many :users, :through => :favorites .. end 

从本质上讲,用户可以通过collections夹进行体育或俱乐部,而collections,体育和俱乐部之间的关联是多态的。

在实践中,这一切都按照我想要的方式工作,并且我设计的整个系统都有效。 但是,我在我的网站上使用Rails_Admin,我在三个地方收到错误:

  1. 第一次加载仪表板(/ admin)时。 如果我刷新页面,它工作正常。
  2. 在Rails_Admin中加载用户模型时
  3. 在Rails_Admin中加载collections夹模型时

这是/admin/user (gist)上的错误消息。 所有错误都是类似的,引用ActiveRecord::Reflection::ThroughReflection#foreign_key delegated to source_reflection.foreign_key, but source_reflection is nil: .

任何人都可以指出我正确的方向,以便我可以解决这个问题吗? 我一直在搜索,并询问其他程序员/专业人士,但没有人能在我的模型中发现错误。 非常感谢!

好吧,好吧,我终于解决了这个问题,并认为我会发布这个修复程序以防万一它将来帮助其他人(没有人喜欢找到有同样问题但没有发布回答的其他人)。

事实certificate,使用多态has_many :through ,需要更多配置。 我的用户模型应如下所示:

 class User < ActiveRecord::Base .. has_many :favorites has_many :sports, :through => :favorites, :source => :favoritable, :source_type => "Sport" has_many :clubs, :through => :favorites, :source => :favoritable, :source_type => "Club" .. end 

这个关于多态性的另一个问题的回答 has_many :through关联帮助我解决这个问题。

当代码包含一个不存在的关联的has_many时(中间重构),我遇到了这个错误。 所以它也可能是由一些常见的has_many错误配置引起的。 Ruby / Rails代码从不关心,因为Ruby的动态样式意味着只能按需调用关联。 但Rails-Admin彻底检查属性,导致reflection问题。