我有模型类别,它有递归的parent_id列。 在DB内部,我创建了sql_view(只读)连接表(使用递归postgres功能,db自动维护所有关系,只为每个相关类别对“创建”ancestor_id& descendent_id),以更平坦的层次关系。
class Category < ActiveRecord::Base
belongs_to :parent,
class_name: 'Category',
foreign_key: :parent_id
has_and_belongs_to_many :category_ancestors,
class_name: 'Category',
join_table: 'category_ancestors',
foreign_key: :descendent_id,
association_foreign_key: :ancestor_id
has_and_belongs_to_many :category_descendents,
class_name: 'Category',
join_table: 'category_ancestors',
foreign_key: :ancestor_id,
association_foreign_key: :descendent_id
end
有了这个,我可以使用
some_category.category_ancestors
some_another.category_descendents
仅保存parent_id。
问题是,在删除类别后,ActiveRecord会自动尝试从category_ancestors表中删除所有相关记录,这是readonly并抛出异常。
任何告诉ActiveRecord不尝试更新join_table记录的方法? 我尝试过autosave:false,没有任何成功。
答案 0 :(得分:0)
您是否尝试过has_and_belongs_to_many关联的autosave
选项?
即使我认为你这样做太复杂了,因为我使用Rails我没有必要使用数据库视图,看看这个:
http://guides.rubyonrails.org/association_basics.html#self-joins