【发布时间】:2014-04-20 17:42:39
【问题描述】:
我目前有以下型号:
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 会重新调整正确的记录,但同时尝试创建/更新记录:
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_ids 创建与 tag_ids 相同的关联,而实际上它应该更新关系并且主要属性应该是 1。
有什么方法可以让 ActiveRecord 玩得更好?我想我的 has_many :primary_tags 关系不正确。
【问题讨论】:
-
你想用 :primary_tags 属性做什么?
-
我希望 primary_tags 关联成为具有所有适当方法的标签的子集。所以我可以调用 base.primary_tags 来获取主要标签的数组,或者调用 base.primary_tags= 来将它们设置为其他东西。
标签: ruby-on-rails activerecord