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:
t.date "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 rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/225eab1a-146f-441a-af8c-e92c476f3fed%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment