2

私はテーブルを作成し、以下を指定しています:

t.integer   :random_id, :unique => true

random_idに一意のインデックスを追加しません。しかし、私がそうする場合:

ActiveRecord::Migration.add_index :test, :random_id, :unique => true

その後、それは動作します。最初の方法の何が問題になっていますか?ありがとう

4

1 に答える 1

4

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

于 2012-12-18T00:05:23.753 に答える