views:

278

answers:

2

Say I have Project, that is in many-to-many association with Tag. I'm using *has_many through* so I have separate join model.

How do I create validation, that checks uniqueness of join model? Now I have only

has_many :tags, :through => :taggings, :uniq => true

But that doesn't validate on save.

A: 

Hi Darth,

Try validates_associated.

That should, I believe, allow the join model validations to run before saving. So in your case:

class Project
   has many :tags, :through => :taggings
   validates_associated :taggings
end

class Taggings
   belongs_to :tags

   #your validations here....
end

class Tag
   has_many :taggings
end
Nick L
A: 

I think what you want is validates_uniqueness_of:

class Taggings
  belongs_to :tags
  validates_uniqueness_of :tag_id, :scope => :project_id
end

This is what I'm using, and works well.

chrispix