2014-10-08 43 views
4

我一直在試圖找到一種方法來實現這一目標,但我無法找到任何嘗試,所以我認爲也許我的方法是完全錯誤的。也就是說,如果我想要兩個字段的組合是唯一的,我應該怎麼做在我的遷移請注意,我不希望它們是索引,只是數據庫字段。遷移範圍的唯一性

例如,對於下面的遷移,我可以單獨將unique: true添加到字段中,但組合?

class CreateSomething < ActiveRecord::Migration 
    def change 
    create_table :something do |t| 
     t.date :datestamp, :null => false 
     t.integer :some_number, :null => false 
     t.timestamps 
    end 
    end 
end 
+0

,你可以在你的'Something'模型 – gabrielhilal 2014-10-08 16:30:46

+0

添加驗證正如@gabrielhilal您需要使用範圍,添加到模型驗證,如果你想實現唯一沒有索引說。 例如:如果您希望some_number和datestamp是唯一的組合,那麼將驗證添加爲 '驗證:some_number,唯一性:{scope::datestamp}' – Allerin 2014-10-08 17:12:41

+0

嘗試執行(ALTER TABLE MyTableADD UNIQUE KEY \'my_unique_key \' 'group_id \',''user_id \'))'如果你正在尋找mysql特定的soln – mintuhouse 2014-10-08 17:51:01

回答

8

我不知道你所說的

意味着請注意,我不希望他們的索引,只是數據庫字段的內容。

索引是數據庫存儲有關列的信息的額外部分。 更重要的是,索引正是你需要的!

class CreateSomething < ActiveRecord::Migration 
    def change 
    create_table :something do |t| 
     t.date :datestamp, :null => false 
     t.integer :some_number, :null => false 
     t.timestamps 
    end 
    add_index :something, [:datestamp, :some_number], unique: true 
    end 
end