我试图在我的 Controller 中使用它来获取与学生(has_many:activities)相关的所有事件(belongs_to:student):
@activities = Activity.joins(:student).where(student: {student_id: @student.id})
但是我收到此错误:
SQLite3::SQLException: no such column: student.student_id: SELECT "activities".* FROM "activities" INNER JOIN "students" ON "students"."id" = "activities"."student_id" WHERE "student"."student_id" = ?
最佳答案
有什么理由不能这样做吗?:
@activities = @student.activities
您的 Student
类(class)应如下所示:
class Student < ActiveRecord::Base
has_many :activities
end
如果您希望能够直接从 Activity
类访问学生的事件,我建议使用范围。像这样的东西应该有效:
class Activity < ActiveRecord::Base
scope :for_student, ->(student) { where(student_id: student) }
end
您可以通过几种不同的方式使用范围:
# pass in the student directly
@activities = Activity.for_student(@student)
# pass in the student id
@activities = Activity.for_student(@student.id)
# pass in many students
@activities = Activity.for_student([@student1, @student2])
关于ruby-on-rails - Rails:ActiveRecord::StatementInvalid 在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433849/