私はテーブルを作成し、以下を指定しています:
t.integer :random_id, :unique => true
random_idに一意のインデックスを追加しません。しかし、私がそうする場合:
ActiveRecord::Migration.add_index :test, :random_id, :unique => true
その後、それは動作します。最初の方法の何が問題になっていますか?ありがとう
私はテーブルを作成し、以下を指定しています:
t.integer :random_id, :unique => true
random_idに一意のインデックスを追加しません。しかし、私がそうする場合:
ActiveRecord::Migration.add_index :test, :random_id, :unique => true
その後、それは動作します。最初の方法の何が問題になっていますか?ありがとう
2つの例で自分で説明したと思います。
t.integerは列定義ですが、add_indexはインデックスを追加します。
:uniqueはインデックスオプションであり、インデックスは列とは別に定義されます:http:
//api.rubyonrails.org/classes/ActiveRecord/Migration.html
これにより、単一の列を一意として定義するだけでなく、列の組み合わせを定義することができます。これは、特定のスコープ内で一意の値のみが必要な場合、たとえばセクション内のコンテンツを並べ替える場合に特に便利です。
add_index(:post_position_within_section, [:position, :sections_id], :unique => true)
ここから少し変更:http: //apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index