将列数据添加到“ has_many通过”关系中

时间:2018-11-25 18:38:11

标签: ruby-on-rails

我的rails应用程序用于组织包含问题的作业。某些作业共享问题,因此,我选择了第三个表AssignmentQuestions而不是复制数据,该表将问题与作业链接起来。

AssignmentQuestions表中还有一列称为“数字”。

作为一个例子:我可以进行一个化学作业和一个生物学作业,它们都包含以下问题:“您对这个主题最感兴趣的是什么?”。在化学作业中,这可能是问题6,而在生物学作业中,可能是问题9。在这种情况下,我的表格(带有相关条目)如下:

分配 (编号,名称)

  • 1,化学
  • 2,生物学

问题 (id,内容)

  • 1,“您对这个主题最感兴趣的是什么?”

AssignmentQuestions (任务分配问题)(赋值ID,问题ID,数字)

  • 1、1、6
  • 2、1、9

此设置使我可以通过AssignmentQuestions将分配与问题相关联,如下所示:

class Assignment < ApplicationRecord
  has_many :question_associations, class_name: "AssignmentQuestion"
  has_many :questions, through: :question_associations
end

这允许我通过控制台中的表达式访问给定作业的问题内容:

>> Assignment.first.questions.first.content
=> "What do you find most interesting about this subject?"

不过,除此之外,我还希望能够通过控制台中的类似表达式访问问题的编号(对于该分配而言是唯一的):

>> Assignment.first.questions.first.number
=> 6

但是,目前这是不可能的,因为“数字”列位于AssignmentQuestions表中,而不是Questions表本身中。

我想象我可以遍历所有相关的Questions和AssignmentQuestions并构造自己的对象哈希,这些哈希既包含“ content”属性,又包含“ number”属性。但是,我希望通过关联本身可以有更好的方法来完成这项工作,以便在数据库中进行工作。

我是否可以通过问题关联将数字列加入,以便我可以同时访问两者?

1 个答案:

答案 0 :(得分:1)

您可能希望从分配中获得第一个问题关联而不是第一个问题:Assignment.first.question_associations.first.number

如果您也需要数字,则遍历该关联更有意义(例如:Assignment.first.question_associations.order(number: :asc).includes(:question).each do |assoc|,并且您在循环内按数字对assoc.numberassoc.question进行了排序并预加载了问题)