次のような一連のクラス間の関係を介して、多対多があります。
class Company
has_many :shares
has_many :users, :through => :shares, :uniq => true
end
class User
has_many :shares
has_many :companys, :through => :shares, uniq => true
end
class Share
belongs_to :company
belongs_to :user
end
ユーザーが 1 つの会社で 1 つの株式のみを持つことができるように、一意の関係を確保したいと考えています。これは、「uniq」引数を使用して達成しようとしたことです。
最初はこれが機能していると思っていましたが、「uniq」の動作は、INSERT前ではなくレコードのSELECTでフィルタリングすることであるように思われるため、データベースに重複したレコードが残っているため、必要に応じて問題になりますuser.shares を呼び出すと重複したレコードが存在する場合は返されるため、:shares 関連付けの処理を直接開始します。
本当にユニークな関係を強制するアプローチを手伝ってくれる人はいますか? ユーザーと会社の間に2番目の関係を追加しようとすると、それは拒否され、元の関係のみが保持されますか?