6
此代碼是否線程安全?Rails 3 ActiveRecord .skip_callback線程安全
MyModel.skip_callback(:save, :before, :my_callback)
my_model_instance.update_attributes(attributes)
MyModel.set_callback(:save, :before, :my_callback)
我可以安全地使用它來避免重新觸發相同的回調嗎?
下面是一個例子
class Blog < ActiveRecord::Base
after_save :update_blog_theme, :if => :active_theme_id_changed?
# ...
private
def update_blog_theme
# Reuses a previously used BlogTheme or creates a new one
blog_theme = BlogTheme.find_by_theme_id_and_blog_id(
self.active_theme_id,
self.id)
blog_theme ||= BlogTheme.create!(
:theme_id => active_theme_id,
:blog_id => self.id)
Blog.skip_callback(:save, :after, :update_blog_theme)
self.update_attributes!(:active_blog_theme_id => blog_theme.id)
Blog.set_callback(:save, :after, :update_blog_theme)
end
end
似乎哈克,你爲什麼不能使用before_save或before_create:上面提到的兩種寶石在阿南德的帖子在這裏與其他可能選項一起上市? – apneadiving
最終要求是什麼? – Anatoly
這裏沒有要求,我沒有使用這個代碼,也許我永遠不會這樣做,但是我已經在互聯網上找到了這個解決方案,並問我自己是否可以安全地在多線程中使用 – mcasimir