簡體   English   中英

Rails:為has_many和has_one創建遷移

[英]Rails: Create migrations for has_many and has_one

我有QuestionOptionAnswer模型,如下所示:

class Question < ApplicationRecord
  belongs_to :user
  has_many :options
  has_one :answer
end

class Option < ApplicationRecord
  belongs_to :question
  has_many :answers
end

class Answer < ApplicationRecord
  belongs_to :question
  belongs_to :option
end

我有一個用於QuestionOption模型的遷移文件,如下所示:

class CreateQuestions < ActiveRecord::Migration[5.2]
  def change
    create_table :questions do |t|
      t.text :body
      t.references :user, foreign_key: true

      t.timestamps
    end
  end
end

class CreateOptions < ActiveRecord::Migration[5.2]
  def change
    create_table :options do |t|
      t.references :question, foreign_key: true

      t.timestamps
    end
  end
end

如果我的理解是正確的,那么我將在這里進行一個belongs_to關聯的遷移。 我的疑問是,這些遷移文件是否足以創建has_many關聯,還是需要在migrations文件中添加任何其他條件? 如果是,請告訴我要添加的內容。 我引用了以下鏈接:[ Rails調查樣式應用程序-顯示選項的所有答案

[1]: https:// https://stackoverflow.com/questions/35771847/rails-survey-style-application-show-all-answers-on-option,但是我不知道是否需要為has_manyhas_one關聯。

您的遷移是正確的,因為如果您將模型視為數據庫表中的模型,則永遠不會將“ has_many”選項存儲在某處。 那只是為了人類的理解,也是為了ActiveRecord。 因此,您的示例中的一個選項屬於一個問題,因此我們必須將該問題的ID存儲在答案的記錄中。 但是,在問題遷移中,我們不存儲有關選項的任何信息,選項“知道”它屬於哪個問題就足夠了。 (與用戶和問題相同)。

然后,只有在模型中,您才可以指定-has_many選項。 這將使您以后可以調用“ question.options”來檢索屬於問題的所有選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM