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

我想确保一种独特的关系,以便用户只能在任何一家公司拥有一份股份,这是我尝试使用“uniq”参数实现的目标。

起初我认为这是可行的,但是似乎“uniq”的行为是过滤记录的SELECT,而不是预先插入,所以我仍然在数据库中得到重复的记录,如果我想这会成为一个问题直接开始处理 :shares 关联,因为调用 user.shares 将返回重复记录(如果存在)。

任何人都可以提供一种可以强制建立真正独特关系的方法吗?这样如果我尝试在用户和公司之间添加第二个关系,它会拒绝它并只保留原始关系?

4

1 回答 1

0

您是否尝试将其添加到您的Share课程中?

validates_uniqueness_of :user, scope: :company

另外,在您的User课堂上,我认为应该是:

has_many :companies, through: :shares

我希望这会有所帮助。

于 2013-01-11T05:51:29.480 回答