【问题标题】:Avoid duplicate entry with has_many through rails避免使用 has_many through rails 重复输入
【发布时间】:2015-09-07 13:17:12
【问题描述】:

我一直在使用这个带有 has_many 的嵌套属性:通过

class Check < ActiveRecord::Base
  has_many :checks_tags, dependent: :destroy
  has_many :tags, through: :checks_tags

  attr_accessible :tags_attributes, :checks_tags_attributes
  accepts_nested_attributes_for :tags, :checks_tags
end 

class Tag < ActiveRecord::Base
  has_many :checks_tags, dependent: :destroy
  has_many :checks, through: :checks_tags  
end

class CheckTag < ActiveRecord::Base
  belongs_to :check
  belongs_to :tag
end

所以这里的问题是当我用这个哈希创建时

"tags_attributes"=>[{"id"=>"", "name"=>"test12", "company_id"=>"1"}, {"id"=>"", "name"=>"test12", "company_id"=>"1"}]

实际上这里有两个同名的标签,所以它创建了两次Tag,然后在CheckTag上放了两次,所以有什么办法可以避免这种创建两次标记?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rails-activerecord


    【解决方案1】:

    如果你想在数据库中禁止它,你可以在check_tag 表的两列的组合上创建一个唯一索引。如果您想在 Rails 中处理它,您可以在 Check 模型上使用 before_save 回调来完成(如果这是您创建这些的唯一方法),但这可能会使您容易受到竞争条件的影响。

    看到这个答案: Index on multiple columns in RoR

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 2019-03-04
      • 2011-06-07
      • 2014-09-01
      • 1970-01-01
      相关资源
      最近更新 更多