2017-01-02 166 views
2

我试图让所有的活动(belongs_to的:学生)相关的学生Rails的:ActiveRecord的:: StatementInvalid在

@activities = Activity.joins(:student).where(student: {student_id: @student.id}) 

但是我越来越:在我的控制器使用这个(的has_many活动)这是一个错误:

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" = ?

+0

堆栈跟踪可能是一个很好的指标在这里,你确定你有正确的模式?此外,为什么需要在这里“加入”,为什么不只是'Activity.where(student:@student)'? –

回答

2

是否有一个理由,为什么你不能做到这一点?:

@activities = @student.activities 

Student类应该是这样的:

class Student < ActiveRecord::Base 

    has_many :activities 

end 

如果你想能够访问t他直接从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]) 
1

尝试删除学生的前缀:

@activities = Activity.joins(:student).where(student: {id: @student.id}) 

它说,它CA没有在表student上找到列student_id

0
@activities = Activity.where(student_id: @student.id) 

@activities = @student.activities 
相关问题