2009-09-14 14 views

Odpowiedz

4

Wypróbuj validates_associated.

To powinno, jak sądzę, umożliwić zatwierdzanie modelu łączenia przed uruchomieniem. Więc w twoim przypadku:

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 
15

myślę co chcesz to validates_uniqueness_of:

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

To właśnie używam i działa dobrze.

+0

Witam, ale kiedy dodaję zduplikowany znacznik do projektu z 'project.tags << Tag.find_or_create_by_name" Design "' to wywołuje wyjątek 'ActiveRecord :: ValidateError', czy istnieje sposób na cichą awarię podczas duplikacji, podczas gdy dodawanie tagu bez problemów, gdy tag jest nowy? Jaki jest najlepszy sposób na zarządzanie tym? Dzięki –

+0

Najprawdopodobniej jest to prostszy sposób, ale myślę, że dodawałoby to tylko duplikaty: 'design_tags = Tag.find_or_create_by_name" Projekt " project.tags << design_tags.reject {| tag | project.tags.include? (tag)} ' –

Powiązane problemy