سؤال

لدي إجراء معقد داخل جهاز التحكم داخل وحدة التحكم التي تؤدي العديد من استعلامات التحديث إلى قاعدة البيانات.

كيف يمكنني إجراء هذا الإجراء يتصرف مثل المعاملة دون أي إعادة صياغة هيكلية؟

هل كانت مفيدة؟

المحلول

MyModel.transaction do
  begin
    @model.update_stuff
    @sub_model.update_stuff
    @sub_sub_model.update_stuff
  rescue ActiveRecord::StatementInvalid # or whatever 
    # rollback is automatic, but if you want to do something additional, 
    # add it here
  end
end

هنا مستندات طريقة المعاملة.

نصائح أخرى

من الممثل أن يجعل جميع الإجراءات في المعاملات المرادقة في وقت واحد مع:

around_filter :transactional

def transactional
  ActiveRecord::Base.transaction do
    yield
  end
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top