gpt4 book ai didi

ruby-on-rails - 如何在不导致 rails 2.3 中的递归的情况下更新 after_save 中的属性?

转载 作者:行者123 更新时间:2023-12-03 21:18:20 25 4
gpt4 key购买 nike

我有一个模型,其中附有 Paperclip 的视频.保存后,我使用保存的视频生成缩略图。我需要在每次保存后执行此操作,即使尚未上传新视频,因为用户可以更改捕获缩略图的时间。

我目前正在使用 after_post_process 来执行此操作,但它只会在上传文件时生成缩略图(这是一个回调,它是 Paperclip 的一部分)。

理想情况下,我会像这样使用 after_save 回调:

after_save :save_thumbnail
def save_thumbnail
#generate thumbnail...
self.update_attributes(
:thumbnail_file_name => File.basename(thumb),
:thumbnail_content_type => 'image/jpeg'
)
end

不幸的是 update_attributes 调用 save,然后调用 before_save 回调导致无限循环。有没有一种简单的方法来规避这种行为?

最佳答案

任意 update_attributeafter_save回调将导致递归,在 Rails3+ 中。
应该做的是:

after_save :updater!
# Awesome Ruby code
# ...
# ...

private

def updater!
self.update_column(:column_name, new_value) # This will skip validation gracefully.
end

这里有一些关于它的文档: https://guides.rubyonrails.org/active_record_callbacks.html#skipping-callbacks

关于ruby-on-rails - 如何在不导致 rails 2.3 中的递归的情况下更新 after_save 中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681285/

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