2017-02-12 19 views
1

Я новичок в Rails. Я пытаюсь создать приложение, в котором учащиеся могут войти в систему и зарегистрироваться на экзамене. У меня есть проблема фильтрации данных, где студент может видеть только экзамены, которые принадлежат к его/ее году и отделу.Доступ к атрибутам другой модели в Rails

Тема имеет следующие столбцы: t.string "name" t.integer "ects" t.integer "year" t.integer "professor_id" (иностранный ключ, который связывает его с профессора).

Его отношения с экзаменом: has_one :exam

экзамен имеет следующие столбцы: t.date "start_date" t.string "department" t.integer "professor_id" t.integer "subject_id"

Его отношения с экзаменом: belongs_to :subject

Пользователь имеет атрибуты (год исследования) и отпечаток artment. Проблема , что экзамен имеет только депатет, но у него нет года.

Я сделал это в exam.rb

scope :department, -> (department) { where('department == ?', 
department) } 
scope :year, -> (year) { where('subject.year == ?', year) } 

Тогда я назвал эти методы управления экзаменов (индекс действия) и передал данные:

@exams = Exam.department(current_user.department) && Exam.year(current_user.year) 

Там есть проблема с год охвата, он не признает предмет. Когда я пытаюсь получить доступ к списку экзаменов это не говорит, что это: SQLite3 :: SQLException: нет такой колонки: subject.year:. ВЫБРАТЬ "экзамены" * FROM "экзамены" WHERE (subject.year == 2)

Но когда я включаю subject_id: scope: year, -> (year) { где ('Subject.find (: subject_id) .year ==?', Year)} В нем написано, что есть синтаксическая ошибка: SQLite3 :: SQLException: near "(": синтаксическая ошибка: SELECT "экзамены". * FROM "exams" WHERE (Subject.find (: subject_id) .year == 2).

Я попытался получить доступ к атрибутам объекта, используя делегат и to_params, но это не помогло. en googling this issue для более , чем 10 дней, но я не смог найти решение.

Я ценю любую помощь. Заранее спасибо :)

ответ

0

обновленный ответ, извините, мой плохой, недостаточно читал вопрос. Что вам нужно, это присоединиться к

Exam.joins(:subject).where(department:current_user.department).where("subjects.year = ?",2016) 
+0

Я пытался что-то вроде этого, но проблема в том, «год», потому что это признак другой модели: предмет. Я пробовал этот код и получил ошибку: SQLite3 :: SQLException: нет такого столбца: exams.year: SELECT "exams". * FROM "экзамены" WHERE "экзамены". Department "=? И «экзамены». «Год» = 2 Я постараюсь поставить: @subjects = Subject.all в индексном действии контроллера экзаменов. – Aida

+0

Я только что передал current_user.year вместо 2016 года, и это сработало.Я понятия не имел, что это проблема. Большое спасибо. – Aida