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.
最好的处理方法是使用偏执狂 gem,这是 acts_as_paranoid 的重新实现。 gem 负责软删除和相关的销毁选项。
参考:https://github.com/rubysherpas/paranoia
像这样覆盖回调
def destroy
run_callbacks :destroy do
# your code here for destroy
end
end
我最终通过将 deleted_at
属性添加到 GlobalizedModel::Translation
模型(在我的例子中是 Treatment::Translation
)解决了这个问题,这样翻译也被软删除了。
在 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.
最好的处理方法是使用偏执狂 gem,这是 acts_as_paranoid 的重新实现。 gem 负责软删除和相关的销毁选项。 参考:https://github.com/rubysherpas/paranoia
像这样覆盖回调
def destroy run_callbacks :destroy do # your code here for destroy end end
我最终通过将 deleted_at
属性添加到 GlobalizedModel::Translation
模型(在我的例子中是 Treatment::Translation
)解决了这个问题,这样翻译也被软删除了。