Rails - 全球化和永久记录依赖::销毁回调

问题描述 投票:0回答: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 的用途),但我丢失了相关的翻译,我想保留它alive

我是否应该仅在某些翻译模型(我使用 permanent_records 的翻译模型)上覆盖

dependent: :destroy
回调?怎样做才是正确的呢?

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

ruby-on-rails soft-delete globalize
3个回答
2
投票

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

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

  2. 像这样覆盖回调

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

1
投票

我最终通过向

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


0
投票
  translation_class.class_eval do
    def destroy
      run_callbacks :destroy
      true
    end
  end

你也试试这个...

© www.soinside.com 2019 - 2024. All rights reserved.