我現在有這些模型:多個關聯爲了同一個模型用了許多通過
class Base < ActiveRecord::Base
has_many :base_tags
has_many :tags, through: :base_tags
has_many :primary_tags, through: :base_tags, class_name: 'Tag', source: :tag, conditions: ['base_tags.primary = ?', true]
has_and_belongs_to_many :channels
end
class Tag < ActiveRecord::Base
has_many :base_tags
has_many :bases, through: :base_tags
end
class BaseTag < ActiveRecord::Base
belongs_to :base
belongs_to :tag
end
我竭力要實現對示範基地的主要標籤。在基本實例調用#primary_tags retuns正確的記錄,但同時要創建/更新的記錄:
Base.create({tag_ids: [1,2], primary_tag_ids: [1]})
我遇到了以下錯誤:
ActiveRecord::RecordNotUnique
Mysql2::Error: Duplicate entry '1-2' for key 'index_bases_tags_on_base_id_and_tag_id': INSERT INTO `base_tags` (`base_id`, `primary`, `tag_id`) VALUES (1, 0, 2)
的ActiveRecord試圖創建primary_tag_id與tag_ids有相同的關聯關係,當它真的應該更新關係並且主屬性應該是1.
是否有任何方法讓ActiveRecord可以很好地播放?我想象我的has_many:primary_tags關係不正確。
你想用primary_tags屬性來完成什麼? – Lumbee
我希望primary_tags關聯是所有適當方法的標籤子集。所以我可以調用base.primary_tags獲取主標籤數組或base.primary_tags =將其設置爲其他值。 – Tom