【发布时间】:2015-03-13 07:40:34
【问题描述】:
我正在使用 rails 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 个。
谁能提供有关此问题的帮助?或者,如果需要更多信息,请询问。
【问题讨论】:
-
我认为您正在寻找数据库上的唯一索引约束。这篇文章可能会对你有所帮助robots.thoughtbot.com/the-perils-of-uniqueness-validations
标签: ruby-on-rails ruby join unique