Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails独特的多对多关系_Ruby On Rails_Ruby_Join_Unique - Fatal编程技术网

Ruby on rails rails独特的多对多关系

Ruby on rails rails独特的多对多关系,ruby-on-rails,ruby,join,unique,Ruby On Rails,Ruby,Join,Unique,我使用的是rails 4,并且使用:has_many:to建立了多对多关系,我试图确保连接是唯一的,这样特定的胶片和标签不会多次连接。通过使用验证的唯一性,我在两次保存之间实现了这一点,但是如果在一次更新中添加了两个或多个相同的标记,则无法确保唯一性。请查看以下相关代码: class Film < ActiveRecord::Base has_many :film_tags, inverse_of: :film, dependent: :destroy has_many :tags

我使用的是rails 4,并且使用
:has_many:to
建立了多对多关系,我试图确保连接是唯一的,这样特定的胶片和标签不会多次连接。通过使用
验证
的唯一性,我在两次保存之间实现了这一点,但是如果在一次更新中添加了两个或多个相同的标记,则无法确保唯一性。请查看以下相关代码:

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
class-Film{uniq},通过::film\u标签
接受\u嵌套的\u属性\u for:film\u标记,允许\u销毁:true
结束
类FilmTag{uniq},通过::电影标签
验证名称的唯一性
结束
我曾尝试在保存前添加一个
,但这只是删除了所有
film\u标签
。uniq
与之相反(也尝试了
uniq{film\u标签{124; film\u标签.标签id}
),但这只是删除了所有
film\u标签
的连接,即使某些标签没有重复,也会删除1


有人能在这个问题上提供帮助吗?或者,如果需要更多信息,请询问。

发生这种情况是因为唯一性验证尝试查找重复记录,在这种情况下,对于两个标记,实际数据库中没有记录。因此,两者都通过了验证并在数据库中创建了标记

我过去也遇到过类似的问题

但是我使用了下面博客中提到的方法


希望有帮助。

我想您正在寻找数据库上的唯一索引约束。这篇文章可能会对你有所帮助