rails 独特的多对多关系
rails unique many to many relationship
我正在使用 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
我曾尝试在 film.film_tags
曾 .uniq
运行 反对的电影中添加 before_save
(也尝试过 uniq{|film_tag| film_tag.tag_id}
),但这只会删除所有film_tag
加入但 1 即使某些标签没有重复。
任何人都可以就此问题提供帮助吗?或者,如果需要更多信息,请询问。
发生这种情况是因为唯一性验证试图找到重复记录,在这种情况下,对于两个标签,实际数据库中都没有记录。因此,两者都通过了验证并在数据库中创建了标签。
我过去遇到过类似的问题。
但是我已经使用了下面博客中提到的方法
https://techbrownbags.wordpress.com/2014/02/05/rails-validation-of-cocoon-nested-forms/
希望对您有所帮助。
我正在使用 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
我曾尝试在 film.film_tags
曾 .uniq
运行 反对的电影中添加 before_save
(也尝试过 uniq{|film_tag| film_tag.tag_id}
),但这只会删除所有film_tag
加入但 1 即使某些标签没有重复。
任何人都可以就此问题提供帮助吗?或者,如果需要更多信息,请询问。
发生这种情况是因为唯一性验证试图找到重复记录,在这种情况下,对于两个标签,实际数据库中都没有记录。因此,两者都通过了验证并在数据库中创建了标签。
我过去遇到过类似的问题。
但是我已经使用了下面博客中提到的方法
https://techbrownbags.wordpress.com/2014/02/05/rails-validation-of-cocoon-nested-forms/
希望对您有所帮助。