在 Rails 中访问另一个模型的属性
Accessing another model's attributes in Rails
我是 Rails 的新手。我正在尝试制作一个学生可以登录的应用程序
并报名参加考试。我在过滤数据时遇到问题,其中
学生只能看到属于 her/his 年和部门的考试。
主题有以下列:
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
用户具有属性年份(学习年份)和部门。问题是
那个考试只有depatment,没有year
我在 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: SELECT "exams".*
从 "exams" 哪里 (subject.year == 2)
但是当我包含 subject_id 时:scope :year, -> (year) {
其中('Subject.find(:subject_id).year == ?',年)}
它说有一个语法错误:
SQLite3::SQLException: near "(": 语法错误: SELECT "exams".* FROM "exams" WHERE (Subject.find(:subject_id).year = = 2).
我试过使用委托和访问主题属性
to_params,但没有帮助。我一直在谷歌搜索这个问题更多
超过 10 天,但我一直未能找到解决方案。
感谢任何形式的帮助。提前致谢:)
更新的答案,对不起我的错,没有足够好地阅读问题。
你需要的是一个join
Exam.joins(:subject).where(department:current_user.department).where("subjects.year = ?",2016)
我是 Rails 的新手。我正在尝试制作一个学生可以登录的应用程序 并报名参加考试。我在过滤数据时遇到问题,其中 学生只能看到属于 her/his 年和部门的考试。
主题有以下列:
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
用户具有属性年份(学习年份)和部门。问题是 那个考试只有depatment,没有year
我在 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: SELECT "exams".* 从 "exams" 哪里 (subject.year == 2)
但是当我包含 subject_id 时:scope :year, -> (year) { 其中('Subject.find(:subject_id).year == ?',年)} 它说有一个语法错误: SQLite3::SQLException: near "(": 语法错误: SELECT "exams".* FROM "exams" WHERE (Subject.find(:subject_id).year = = 2).
我试过使用委托和访问主题属性 to_params,但没有帮助。我一直在谷歌搜索这个问题更多 超过 10 天,但我一直未能找到解决方案。
感谢任何形式的帮助。提前致谢:)
更新的答案,对不起我的错,没有足够好地阅读问题。 你需要的是一个join
Exam.joins(:subject).where(department:current_user.department).where("subjects.year = ?",2016)