Rails - 全球化和 Permanent_record 相关::destroy 回调

Rails - Globalize and Permanent_record dependent: :destroy callbacks

在 Rails 4.2 项目中,我使用 gem 'permanent_records' 处理记录软删除,gem 'globalize' 处理翻译。

Globalize 在翻译模型和翻译模型 (source) 之间设置以下关系:

has_many :translations, :class_name  => translation_class.name,
                                :foreign_key => options[:foreign_key],
                                :dependent   => :destroy,
                                :extend      => HasManyExtensions,
                                :autosave    => true,
                                :inverse_of  => :globalized_model

结果是在翻译后的模型上调用 :destroy,并没有删除它(这就是 permanent_records 的用途),但是我丢失了相关的翻译,这是我想要的保持活着.

我是否应该仅在某些翻译模型(我使用 permanent_records 的翻译模型)上覆盖 dependent: :destroy 回调?如何正确操作?

还有其他方法可以得到想要的结果吗?

有很多方法可以处理它。我不建议覆盖 dependent: :destroy.

  1. 最好的处理方法是使用偏执狂 gem,这是 acts_as_paranoid 的重新实现。 gem 负责软删除和相关的销毁选项。 参考:https://github.com/rubysherpas/paranoia

  2. 像这样覆盖回调

    def destroy
      run_callbacks :destroy do
        # your code here for destroy
      end
    end
    

我最终通过将 deleted_at 属性添加到 GlobalizedModel::Translation 模型(在我的例子中是 Treatment::Translation)解决了这个问题,这样翻译也被软删除了。