独特的协会:通过

时间:2013-01-10 15:39:15

标签: ruby-on-rails-3

我有很多:通过一组类之间的关系:

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”参数实现的。

起初我认为这是有效的,但似乎行为os“uniq”是过滤记录的SELECT,而不是INSERT之前所以我仍然在数据库中获得重复记录,如果我想直接处理:shares关联,因为调用user.shares会返回重复记录(如果存在)。

任何人都可以帮助一种强制真正建立单一关系的方法吗?所以,如果我尝试在用户和公司之间添加第二种关系,它会拒绝它而只保留原始的?

1 个答案:

答案 0 :(得分:0)

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

validates_uniqueness_of :user, scope: :company

另外,在User课程中我认为应该是:

has_many :companies, through: :shares

我希望有所帮助。