Ruby on rails 如何在ActiveRecord中建模问答数据结构?
这感觉应该非常简单,但就我的一生而言,我一直没能把它做好 在我的应用程序中,我希望有Ruby on rails 如何在ActiveRecord中建模问答数据结构?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,这感觉应该非常简单,但就我的一生而言,我一直没能把它做好 在我的应用程序中,我希望有问题和答案 一个问题只能有一个答案,但是答案可以用于许多问题 例如。 问题表数据 “二加二等于?” “正方形的边数?” 应答表数据 四 两个问题只有一个答案,但答案记录可用于两个问题 我想也许这会奏效: rails g resource question verbiage:string answer:references 但是,我必须在问题模型上添加一个所属的:答案,这似乎不正确 感觉应该可以这样做: Ques
问题
和答案
一个问题
只能有一个答案
,但是答案
可以用于许多问题
例如。
问题表数据
问题
只有一个答案
,但答案
记录可用于两个问题
我想也许这会奏效:
rails g resource question verbiage:string answer:references
但是,我必须在问题
模型上添加一个所属的:答案
,这似乎不正确
感觉应该可以这样做:
Question.first.answer # returns the single answer
Answer.first.questions # returns all of the Questions where this record is the Answer
有谁能教我如何在ActiveRecord中对此建模?如果你不想使用demir的答案
- 问题属于回答
- 答案有很多问题
- 制作一个问答连接表
- 问题答案属于问题
- 问题答案属于答案
- 问题有一个问题有答案
- 答案有很多问题的答案
- 问题1:通过:问题回答来源:答案
- 答案有很多:问题通过:问题来源:问题
rails g scaffold Answer value:string
rails g scaffold Question verbiage:string answer:references
class Answer < ApplicationRecord
has_many :questions
end
class Question < ApplicationRecord
belongs_to :answer
end
课堂答案
这实际上取决于需求是什么。在大多数情况下,您实际上需要一个联接表:
class Question
has_many :options
has_many :answers, through: :options
end
class Option
belongs_to :question
belongs_to :answer
end
class Answer
has_many :options
has_many :questions, through: :options
end
如果问题的答案是正确的,您可以使用单独的关联,该关联直接链接到答案表:
class Question
has_many :options
has_many :answers, through: :options
belongs_to :correct_answer, class_name: 'Answer'
end
或者,如果布尔列可以是多个正确答案,则可以将其添加到选项
表中
class Question
has_many :options
has_many :answers, through: :options
has_many :correct_answers, through: :options,
class_name: 'Answer',
-> { where(options: { correct: true }) }
end
在我发帖后,我想知道答案是否是一个
有很多,但说“一个答案有很多问题”感觉真的很奇怪。感觉一个问题应该有答案,但也许我太沉迷于术语了。不管怎样,我接受了你的建议,它完全符合我的要求。非常感谢@demir!感谢@max的回复,因为我相信我需要在未来的应用程序/功能中参考它,哈哈!然而,对于这个特殊的例子,我只希望一个问题有一个可能的答案,而没有能力从多个可能的答案中进行选择。但是很酷的例子/解释可能会为其他人提供参考。
class Question
has_many :options
has_many :answers, through: :options
has_many :correct_answers, through: :options,
class_name: 'Answer',
-> { where(options: { correct: true }) }
end