Rails 5.1升级后has_many through关联查询无结果问题求助
问题解决:Rails 5.1关联查询SQL异常
解决方案
修改Member模型中的关联定义,显式指定source参数:
class Member < ActiveRecord::Base belongs_to :user has_many :user_accounts, through: :user, source: :user_accounts end
原因分析
Rails 5.1对through关联的源推断逻辑进行了调整。当关联名称(user_accounts)与目标模型名称(UserAccount)匹配时,框架可能错误地尝试直接建立Member与UserAccount的关联,而非通过User模型上已定义的has_many :user_accounts关联构建查询。这就导致生成的SQL错误地将users(模型名)当作字段名,出现WHERE user_accounts.users = NULL的无效条件。
显式指定source: :user_accounts后,Rails会明确使用User模型上的同名关联来生成正确的查询条件,最终SQL会按预期关联users.id = 109。
其他类似关联(如member.stores)正常工作,大概率是因为它们的关联名称与目标模型名称不存在这种直接匹配,Rails能正确推断出through关联的源。
内容的提问来源于stack exchange,提问作者opensource-developer
相关产品推荐
相关产品推荐

