Ruby on Rails Sunday, February 12, 2017

Hi :) 


I'm new to Rails. I'm trying to make an app where students can login in and signup for the exam. I have a problem filtering data, where a student can only see exams which belong to her/his year and department. 


Subject has the following columns:

    t.string  "name"
    t.integer "ects"
    t.integer "year"
    t.integer "professor_id" (foreign key which relates it to professor). 
Its relationship with exam: 
has_one :exam 
Exam has the following columns:    "start_date"
    t.string  "department"
    t.integer "professor_id"
    t.integer "subject_id"  
Its relationship with exam: 
 belongs_to :subject 
User has attributes year (year of study) and department. The problem is that exam only has depatment, but it doesn't have year. 
I have made this in exam.rb 
scope :department, -> (department) { where('department == ?', department) }
scope :year, -> (year) { where('subject.year == ?', year) } 
Then I called these methods in exams controller (index action) and passed the data:
 @exams = Exam.department(current_user.department) && Exam.year(current_user.year)
There is a problem with a scope year, it doesn't recognize subject. When I try to access the list of exams it says this: 
SQLite3::SQLException: no such column: subject.year: SELECT "exams".* FROM "exams" WHERE (subject.year == 2)
But when I include subject_id:  scope :year, -> (year) { where('Subject.find(:subject_id).year == ?', year) }
It says there is a syntax error: SQLite3::SQLException: near "(": syntax error: SELECT "exams".* FROM "exams" WHERE (Subject.find(:subject_id).year == 2). 
I have tried accessing subject attributes by using delegate and to_params, but it didn't help. I've been googling this issue for more than 10 days, but I haven't been able to find a solution. 
I appreciate any kind of help. Thanks in advance :) 


You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
To post to this group, send email to
To view this discussion on the web visit
For more options, visit

No comments:

Post a Comment