【问题标题】:Accessing another model's attributes in Rails在 Rails 中访问另一个模型的属性
【发布时间】:2017-02-12 11:09:26
【问题描述】:

我是 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

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

我在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".* FROM "exams" WHERE (subject.year == 2)

但是当我包含 subject_id: scope :year, -> (year) { where('Subject.find(:subject_id).year == ?', year) } 它说有一个语法错误: SQLite3::SQLException: 接近 "(": 语法错误: SELECT "exams".* FROM "exams" WHERE (Subject.find(:subject_id).year == 2)。

我尝试使用委托和访问主题属性 to_params,但它没有帮助。我一直在谷歌上搜索这个问题以获取更多信息 超过 10 天,但我还没有找到解决方案。

感谢任何形式的帮助。在此先感谢:)

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我尝试过这样的事情,但问题是“年份”,因为它是另一个模型的属性:主题。我尝试了这段代码并得到了错误: SQLite3::SQLException: no such column:exams.year: SELECT "exams".* FROM "exams" WHERE "exams"."department" = ? AND "exams"."year" = 2 我将尝试将:@subjects = Subject.all 放入考试控制器的索引操作中。
    • 我刚刚通过了 current_user.year 而不是 2016 年,它起作用了。我不知道 join 一直是问题所在。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 2012-02-28
    • 2012-12-30
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多