在Rails中访问另一个模型的属性

时间:2017-02-12 11:09:27

标签: ruby-on-rails model controller belongs-to has-one

我是Rails的新手。我正在尝试创建一个学生可以登录的应用程序 和注册考试。我有一个过滤数据的问题,其中a 学生只能看到属于她/他年份和部门的考试。

主题包含以下列:     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

用户具有属性年份(学习年份)和部门。问题是 那个考试只有沮丧,但没有一年。

我在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“考试”。*     从“考试”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,但没有帮助。我一直在谷歌上搜索这个问题 超过10天,但我找不到解决方案。

我感谢任何帮助。在此先感谢:)

1 个答案:

答案 0 :(得分:0)

更新了答案,对不起我的不好,没有读好问题。 你需要的是一个加入

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