Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在ActiveRecord中建模问答数据结构?_Ruby On Rails_Activerecord - Fatal编程技术网

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
    
  • 运行rails数据库:迁移

  • 创建联合行动

    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