2017-09-03 74 views
0

我正在做一個測驗應用程序與Ruby on Rails,我有一個模型「答案」。現在我需要保存用戶給出到數據庫的問題的答案,所以我想我會做一個模型「GivenAnswer」和配套控制器與這些現有型號爲屬性:Rails - 在數據庫中保存「給定答案」的最佳方法?

  • 「用戶」

  • 「問題」

  • 「答案」

我打算把所有的邏輯對於給定答案解析成「GivenAnswer s「控制器,但我不確定數據庫遷移的外觀。另外,我想在「用戶」和「問題」上有索引,因爲我要經常顯示「每個用戶的答案」和「每個問題的答案」。我產生這種遷移:

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的初學者,所以我很感謝任何指針。

+0

因爲你的問題是關於數據庫遷移的問題,如果你正在使用'rails5',那麼最好添加'rails-migrations'標籤,並且添加'ruby-on-rails-5' –

+0

感謝提示:) @Imran – megahra

回答

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 

但我不認爲你應該直接關係到AnswerGivenAnswer。將AnswerQuestion聯繫起來可能更有意義

+0

謝謝@Toby,這很有道理。 'Answer'與'Question'相關,並且具有* 1的關係。你爲什麼說我不應該把'Answer'與'GivenAnswer'聯繫起來? – megahra

+0

你是說一個問題或多個問題的答案有多個答案?如果'Answer'與'Question'相關,'Question'與'GivenAnswer'相關,那麼'GivenAnswer''''''''''''''' Question''就可以訪問'Answer'。如果直接引用「答案」,則會在數據庫級別出現不一致的可能性。 –

+0

例如,如果問題的答案發生了變化,但是與該問題的給定答案相關的答案沒有改變?所以,現在問題A的正確答案已經變成了X,但問題A上給出的答案對象說正確的答案仍然是Y.應該不惜一切代價避免數據庫級別的不一致,因爲它們會使應用程序在維護中不可維護長跑。 –

相關問題