Rails - Globalize和Permanent_record依赖:: destroy destroyback

时间:2017-12-05 09:07:51

标签: ruby-on-rails soft-delete globalize

在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回调?怎么做得好?

还有其他方法可以获得理想的结果吗?

2 个答案:

答案 0 :(得分:2)

有很多方法可以处理它。我不建议覆盖依赖的:: destroy。

  1. 使用paranoia gem处理它的最佳方法,这是一个act_as_paranoid的重新实现。这个gem负责使用依赖的destroy选项进行软删除。 请参阅:https://github.com/rubysherpas/paranoia

  2. 像这样覆盖回调

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

答案 1 :(得分:1)

我最终通过向deleted_at模型添加GlobalizedModel::Translation属性(在我的情况下为Treatment::Translation)来解决了这个问题,因此翻译也会被软删除。