postgresql查看连接表& has_and_belongs_to_many_association,如何跳过回调

时间:2017-12-14 06:58:53

标签: ruby-on-rails postgresql activerecord

我有模型类别,它有递归的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,没有任何成功。

1 个答案:

答案 0 :(得分:0)

您是否尝试过has_and_belongs_to_many关联的autosave选项?

即使我认为你这样做太复杂了,因为我使用Rails我没有必要使用数据库视图,看看这个:

http://guides.rubyonrails.org/association_basics.html#self-joins