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