0
私は現在、私のリストユーザーグループのhas_manyのための次の移行を持っています。組合を通じて:Railsのユニーク制約モデル+データベースレベルと競合状態
class UserGroup < ActiveRecord::Base
belongs_to :user
belongs_to :group
validates_uniqueness_of :user, :scope => :group, :message => :not_unique
end
:
class CreateUserGroups < ActiveRecord::Migration
def change
create_table :user_groups do |t|
t.integer :user_id, :null => false
t.integer :group_id, :null => false
t.timestamps null: false
end
end
end
次のモデルとユニーク制約付き一意性検証はうまくいっていますが、アプリケーションの競合するスレッドが競合状態を引き起こし、アプリケーションレベルのチェックを過ぎてしまった場合はどうすればよいですか?データベースレベルでユーザーとグループの結合表の重複行を保護するために移行を作成するにはどうすればよいですか?
を追加する必要がありますか?これは双方向的に動作しますか、またはグループがユーザー/ユーザーを追加してグループを追加した場合ですか? – Riptyde4
はい、双方向です。 –
順序は一意ではありませんが、索引は、最初の列で照会しているかどうか、またはその両方を照会する場合にのみ使用されます。これは 'select * from user_groups user_id = 1'では使用されますが、' select * from user_groups where group_id = 1'では使用されません。 – Iceman