避免使用has_many通过rails重复输入

时间:2015-09-07 13:17:13

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

我一直在使用has_many:through

这个嵌套属性
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"}]

实际上这里有两个同名的标签,所以它创建标签两次,然后在 CheckTag 上放两次,所以有没有办法避免这种创建两次标签

1 个答案:

答案 0 :(得分:0)

如果要在数据库中禁止它,可以在 java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.matant.gpsportclient.Utilities.TimePicker$OnCompleteListener.onComplete(java.lang.String, java.lang.String)' on a null object reference at com.example.matant.gpsportclient.Utilities.TimePicker.onTimeSet(TimePicker.java:71) 表的两列组合上创建唯一索引。如果你想在rails中处理它,可以在check_tag模型上使用before_save回调(如果这是你创建它们的唯一方法),但这可能会让你容易受到竞争条件的影响。

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