Rails ActiveRecord多级关联查询条件设置报错,求正确写法
解决Rails ActiveRecord多级关联查询的条件问题
嘿,我来帮你搞定这个关联查询的bug!首先先给你指出模型定义里的一个小疏忽——你的CourseSlot类里的关联写错了:
# 原来的错误写法 has_many :user, through: :course # 应该改成复数形式 has_many :users, through: :course
接下来分析你遇到的查询错误:你写的where(course: {users: current})会让ActiveRecord错误地生成WHERE "course"."user_id" = 2这样的条件,但实际上courses表根本没有user_id字段,用户和课程的关联是通过courses_users中间表实现的,所以这个条件完全不对路。
给你几种正确的写法:
方法一:直接用用户ID查询
CourseSlot .joins(course: :users) .where(users: { id: current_user_id })
方法二:用用户对象查询
如果你已经获取了current_user对象,也可以直接传入对象:
current_user = User.find(current_user_id) CourseSlot .joins(course: :users) .where(users: current_user)
方法三:从用户端反向查询(更直观)
其实你还可以换个思路,从当前用户出发,先找到他的所有课程,再关联对应的CourseSlot,写法更简洁:
current_user = User.find(current_user_id) current_user.courses.joins(:course_slots).select('course_slots.*')
这几种写法都会生成正确的SQL,自动关联courses_users中间表,不会再出现missing FROM-clause entry for table "course"的错误啦。
内容的提问来源于stack exchange,提问作者Ian Dickinson
相关产品推荐
相关产品推荐

