1

このような検証をモデルに追加しました。

validates :name, uniqueness: {scope: user_id}

そして、移行時に次のような add_index を追加しました:

add_index(:posts, :name)

しかし、Rails APIページでデータの整合性に関する部分を読んだだけです。

そして、モデルに整合性エラーが発生するかどうか疑問に思っていたので、私の質問は次のとおりです。インデックスを次のように書き換えるべきですか?

add_index(:posts, [:name, :user_id]), unique: true

皆さんありがとう、

4

2 に答える 2

3

あなたが話しているデータの整合性は、おそらくすでにご存知のように、アプリケーション レベルとデータベース レベルの 2 つのレベルで適用できます。

アプリケーション レベル: 追加した検証。 データベースレベル:あなたが提案したインデックス

最初のものはすでに設定されています。したがって、すべてが Rails モデルを通過して db に保存される限り、db の整合性の問題は発生しません。

ただし、他のサードパーティ アプリケーションがデータベースに書き込む可能性がある場合、データベース レベルでも一意性を強制することは悪い考えではありません。

1 つ目で十分だとしても、2 つ目を設定しないことも悪くありません。

さらに、user_id に関連付けられた名前を頻繁にクエリする場合は、実際には を使用する方が適切でadd_index(:posts, [:name, :user_id])あり、クエリが少し速くなります。

于 2013-05-20T01:58:54.413 に答える
1

はい - それは良い考えです。モデルの検証は、複合主キーを意味します。

于 2013-05-20T01:22:53.057 に答える