2013-01-10 63 views
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”是筛选记录的选择,而不是pre-INSERT,所以我仍然在数据库中得到重复的记录,这成为一个问题如果我想直接开始处理:shares关联,那么调用user.shares会返回重复记录(如果存在)。

任何人都可以帮助一种方法,这将迫使真正的uniq关系?所以如果我尝试添加用户和公司之间的第二种关系,它会拒绝它,只保留原来的?

回答

0

你有没有试过把它加到你的Share类中?

validates_uniqueness_of :user, scope: :company 

而且,在你User类我觉得应该是:

has_many :companies, through: :shares 

我希望帮助。