3

在 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 的),但我丢失了相关的翻译,我想保留

我应该dependent: :destroy只在某些翻译模型(我使用permanent_records的翻译模型)上覆盖回调吗?如何正确地做到这一点?

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

4

2 回答 2

2

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

  1. 使用 paranoia gem 处理它的最佳方法是acts_as_paranoid 的重新实现。这个 gem 使用依赖销毁选项来处理软删除。参考:https ://github.com/rubysherpas/paranoia

  2. 像这样覆盖回调

    def destroy
      run_callbacks :destroy do
        # your code here for destroy
      end
    end
    
于 2017-12-05T09:34:40.603 回答
1

我终于通过向模型(在我的例子中)添加一个deleted_at属性来解决这个问题,这样翻译也被软删除。GlobalizedModel::TranslationTreatment::Translation

于 2017-12-05T11:03:22.513 回答