Rails - 在数据库中保存“给定答案”的最佳方法?

时间:2017-09-03 10:59:54

标签: ruby-on-rails ruby rails-migrations ruby-on-rails-5

我正在使用Ruby on Rails制作测验应用程序,其中我有一个模型“答案”。现在我需要保存用户为数据库提出问题的答案,所以我想我会将模型“GivenAnswer”和匹配控制器与这些现有模型作为属性:

  • “用户”

  • “问题”

  • “接听”

我将把用于分析给定答案的所有逻辑放入“GivenAnswers”控制器,但我不确定db迁移应该如何。此外,我想索引“用户”和“问题”,因为我将经常显示“每个用户的答案”和“每个问题的答案”。我生成了这个迁移:

class CreateGivenAnswers < ActiveRecord::Migration[5.0]
  def change
    create_table :given_answers do |t|
      t.references :user, foreign_key: true
      t.references :question, foreign_key: true
      t.references :answer, foreign_key: true

      t.timestamps
    end
  end
end

但是我想知道表格是否应该是纯粹的关系:

class CreateGivenAnswers < ActiveRecord::Migration[5.0]
  def change
    create_table :given_answers, id:false do |t|
      t.belongs_to :user, index: true
      t.belongs_to :question, index: true
      t.belongs_to :answer
    end
  end
end

我是Rails的初学者,所以我会感谢任何指针。

1 个答案:

答案 0 :(得分:1)

belongs_toreferences的别名,因此您使用的是哪一个没有区别。

在这种情况下,请勿删除id列。

任何外键也应该是一个索引。

我会这样做:

class CreateGivenAnswers < ActiveRecord::Migration[5.0]
  def change
    create_table :given_answers, id:false do |t|
      t.references :user, index: true, foreign_key: true
      t.references :question, index: true, foreign_key: true
      t.references :answer, index: true, foreign_key: true
    end
  end
end

但我认为您不应将Answer直接与GivenAnswer联系起来。将AnswerQuestion

联系起来会更有意义