Rails关联报错:ActiveRecord::HasManyThroughOrderError求助
解决Rails HasManyThroughOrderError错误
这个错误的根源其实很简单——你在定义has_many :through关联时,把顺序搞反了!
Rails在处理has_many :through关联的时候,必须先定义中间的关联关系(也就是user_badges),之后才能定义基于它的through关联。你当前的代码里,不管是User模型还是Badge模型,都先写了has_many :through的关联,再写中间的has_many :user_badges,这就导致Rails找不到构建through关系所需的基础关联,所以抛出了这个错误。
修正后的模型代码
User模型
class User < ApplicationRecord ... # 先定义中间关联 has_many :user_badges # 再定义through关联 has_many :badges, through: :user_badges ... end
Badge模型
class Badge < ApplicationRecord # 先定义中间关联 has_many :user_badges # 再定义through关联 has_many :users, through: :user_badges end
调整完顺序之后,Rails就能正确识别关联关系了。你之前执行的b = Badge.create(title: 'first'); User.last.badges << b,或者直接调用User.last.badges的操作,都能正常运行,不会再触发那个错误啦。
内容的提问来源于stack exchange,提问作者Danil Panshin
相关产品推荐
相关产品推荐

