我一直在使用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 上放两次,所以有没有办法避免这种创建两次标签
答案 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