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,我在三个地方收到错误:
- 第一次加载仪表板(/ admin)时。 如果我刷新页面,它工作正常。
- 在Rails_Admin中加载用户模型时
- 在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问题。
- 使用多个“用户”模型获取Paper_trail + Rails_admin +设计
- 使用rails_admin gem使用roll自己的身份validation
- Rails管理员:没有Rails 4应用程序的编辑,显示或删除按钮
- Rails_admin:我应该有admin_user或具有admin角色的用户来管理用户和管理面板
- Rails 4:Paperclip和rails_admin“未定义的方法`attachment_definitions’错误”
- 随机显示NoMethodError:未定义的方法`empty?’ 0:Fixnum
- 设计:从用户模型中获取和设置区域设置
- 如何隐藏在Rails管理员中添加新选项
- Rails管理员 – 删除相关对象