0

次のような一連のクラス間の関係を介して、多対多があります。

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番目の関係を追加しようとすると、それは拒否され、元の関係のみが保持されますか?

4

1 に答える 1

0

Shareこれをクラスに追加しようとしましたか?

validates_uniqueness_of :user, scope: :company

また、あなたのUserクラスでは、次のようにすべきだと思います:

has_many :companies, through: :shares

それが役立つことを願っています。

于 2013-01-11T05:51:29.480 に答える