gpt4 book ai didi

ruby-on-rails - before_update 回调中的无限循环

转载 作者:数据小太阳 更新时间:2023-10-29 08:42:20 24 4
gpt4 key购买 nike

我正在尝试更新翻译,但它变成了无限循环,因为在 perform 方法中我重复保存。我该如何解决这个问题?

before_update :update_translations, on: :edit

  def update_translations
id = self.id
order = Order.find(id)
locale = order.translations.find(order.translation.id).locale.to_s
TranslateOrderFeedbackWorker.perform_async(id, locale)
end
def perform(id, current_locale)
order = Order.find(id)
I18n.locale = current_locale
text = order.feedback
translator = TranslateTextService.new

I18n.available_locales.each do |locale|
next if locale.to_s == current_locale

I18n.locale = locale
order.feedback = translator.translate(text, current_locale, locale.to_s)
end
order.save # <= infinity loop here
end

最佳答案

解决这个问题的一个简单方法是在模型上添加一个虚拟属性,告诉它是否运行作业:

# in your model
attr_accessor :translated

# in your update_translations method
unless translated
TranslateOrderFeedbackWorker.perform_async(id, locale)
end

# in your job
order.translated = true
order.save

您也可以将 translated 设为数据库中的实际列 - 代码是相同的,但您不需要虚拟属性(attr_accessor)。

如果有很多此类标志(记录必须经过一系列转换),您可以考虑使用状态机,例如 aasm .

关于ruby-on-rails - before_update 回调中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57985374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com