2015-01-14 8 views
3

Я использую рельсы 4 и имею много-много отношений, используя: has_many: through, и я стараюсь, чтобы соединение было уникальным, так что конкретный фильм и тег не объединяются друг с другом чем один раз. используя validates_uniqueness_of, я достиг этого между сохранением, однако, если в одном обновлении добавлены два или более одинаковых тега, уникальность не обеспечивается. пожалуйста, найти ниже соответствующего кода:рельсы уникальные для многих отношений

class Film < ActiveRecord::Base 
    has_many :film_tags, inverse_of: :film, dependent: :destroy 
    has_many :tags, -> {uniq}, through: :film_tags 

    accepts_nested_attributes_for :film_tags, allow_destroy: true 
end 

class FilmTag < ActiveRecord::Base 
    belongs_to :film, inverse_of: :film_tags 
    belongs_to :tag, inverse_of: :film_tags, counter_cache: true 

    validates_uniqueness_of :tag_id, scope: :film_id, message: "duplicate tag" 
end 

class Tag < ActiveRecord::Base 
    has_many :film_tags, inverse_of: :tag, dependent: :destroy 
    has_many :films, -> {uniq}, through: :film_tags 

    validates_uniqueness_of :name 
end 

Я попытался добавить before_save к фильму, где film.film_tags был .uniq работать против него (также попытался Uniq {| film_tag | film_tag.tag_id}), но это только удаляет все film_tag объединяется, но 1, даже если некоторые теги не дублируются.

Может ли кто-нибудь помочь в решении этой проблемы? В качестве альтернативы, если требуется дополнительная информация, пожалуйста, спросите.

+0

Я думаю, что вы ищете уникальное ограничение индекса на db. Эта статья может помочь вам http://robots.thoughtbot.com/the-perils-of-uniqueness-validations – itsthewrongway

ответ

0

Это происходит потому, что проверка уникальности пытается найти дублируемую запись. В этом случае для обоих тегов нет записи, присутствующей в фактической БД. Таким образом, оба передают проверку и создают теги в БД.

Я столкнулся с аналогичной проблемой в прошлом.

Но я использовал подход, упомянутый в следующем блоге.

https://techbrownbags.wordpress.com/2014/02/05/rails-validation-of-cocoon-nested-forms/

Надеется, что это помогает.

Смежные вопросы