我的rails应用程序用于组织包含问题的作业。某些作业共享问题,因此,我选择了第三个表AssignmentQuestions而不是复制数据,该表将问题与作业链接起来。
AssignmentQuestions表中还有一列称为“数字”。
作为一个例子:我可以进行一个化学作业和一个生物学作业,它们都包含以下问题:“您对这个主题最感兴趣的是什么?”。在化学作业中,这可能是问题6,而在生物学作业中,可能是问题9。在这种情况下,我的表格(带有相关条目)如下:
分配 (编号,名称)
问题 (id,内容)
AssignmentQuestions (任务分配问题)(赋值ID,问题ID,数字)
此设置使我可以通过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”属性。但是,我希望通过关联本身可以有更好的方法来完成这项工作,以便在数据库中进行工作。
我是否可以通过问题关联将数字列加入,以便我可以同时访问两者?
答案 0 :(得分:1)
您可能希望从分配中获得第一个问题关联而不是第一个问题:Assignment.first.question_associations.first.number
。
如果您也需要数字,则遍历该关联更有意义(例如:Assignment.first.question_associations.order(number: :asc).includes(:question).each do |assoc|
,并且您在循环内按数字对assoc.number
和assoc.question
进行了排序并预加载了问题)