在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
回调?怎么做得好?
还有其他方法可以获得理想的结果吗?
答案 0 :(得分:2)
有很多方法可以处理它。我不建议覆盖依赖的:: destroy。
使用paranoia gem处理它的最佳方法,这是一个act_as_paranoid的重新实现。这个gem负责使用依赖的destroy选项进行软删除。 请参阅:https://github.com/rubysherpas/paranoia
像这样覆盖回调
def destroy
run_callbacks :destroy do
# your code here for destroy
end
end
答案 1 :(得分:1)
我最终通过向deleted_at
模型添加GlobalizedModel::Translation
属性(在我的情况下为Treatment::Translation
)来解决了这个问题,因此翻译也会被软删除。