Я использую рельсы 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, даже если некоторые теги не дублируются.
Может ли кто-нибудь помочь в решении этой проблемы? В качестве альтернативы, если требуется дополнительная информация, пожалуйста, спросите.
Я думаю, что вы ищете уникальное ограничение индекса на db. Эта статья может помочь вам http://robots.thoughtbot.com/the-perils-of-uniqueness-validations – itsthewrongway