2017-02-12 63 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

用戶具有屬性一年(一年研究)和dep artment。問題是 考試只有depatment,但它沒有一年。

我在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:no such column:subject.year:SELECT「exams」。* FROM「exams」WHERE(subject.year == 2)

但是,當我包括subject_id:範圍:年, - >(年){ where('Subject.find(:subject_id).year ==?',year)} 它說有一個語法錯誤: SQLite3 :: SQLException:near「(」:syntax error:SELECT「exams」。* FROM「exams」WHERE(Subject.find(:subject_id).year == 2)。

我試着通過使用訪問主題屬性代表和 to_params,但它沒有幫助。 en谷歌搜索這個問題更多 比10天,但我一直無法找到解決方案。

我很欣賞任何形式的幫助。在此先感謝:)

回答

0

更新的答案,對不起我的壞,沒有讀好的問題。 你需要的是一個連接

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

我已經試過這樣的事情,但問題是「一年」,因爲它是另一種模式的屬性:主題。 SQLite3 :: SQLException:沒有這樣的列:exams.year:SELECT「考試」。 AND「exams」。「year」= 2我會嘗試將@subjects = Subject.all放在考試控制器的索引操作中。 – Aida

+0

我剛剛通過current_user.year而不是2016年,它的工作。我一直都不知道加入是一個問題。非常感謝。 – Aida

相關問題