2009-09-14 12 views
10

というプロジェクトは、タグと多対多の関係にあるとします。私はhas_manyからまでを使用していますので、私は別の結合モデルを持っています。Railsで多対多関連の一意性を確認

結合モデルの一意性をチェックする検証を作成するにはどうすればよいですか?今私はただ持っている

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

しかし、それは保存時に検証されません。

答えて

4

お試しvalidates_associated

これは、保存する前に結合モデルの検証を実行できるようにするものです。だからあなたの場合:

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

これは私が使用しているもので、うまく機能:

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

私が何をしたいことはvalidates_uniqueness_ofだと思います。

+0

こんにちは、 'project.tags << Tag.find_or_create_by_name"でプロジェクトに重複したタグを追加すると、 '' ActiveRecord :: ValidateError'例外が発生しますが、重複しないで静かに失敗する方法はありますか?タグが新しいときに問題なくタグを追加しますか?これを管理する最良の方法は何ですか?ありがとう –

+0

おそらくそれを行う簡単な方法がありますが、これは重複しないものだけを追加すると思います: 'design_tags = Tag.find_or_create_by_name" Design " project.tags << design_tags.reject {| tag | project.tags.include?(タグ)} ' –

関連する問題