Транзакции в контроллере - PullRequest
0 голосов
/ 30 мая 2019

Я хочу использовать метод транзакций в рельсах, где, если мой student_code равен nil, это вызовет откат.

Если мой school_code равен nil, он обновит мой атрибут school_code с помощью 1, а если он будет любым, - нет. затем он обновит его до +1, и то же самое с teacher_code и student_code.

Скажем, у меня school_code = 1 и teacher_code и student_code оба равны 2, тогда он обновит все три с +1.

Если какой-либо из них будет nil, то он должен повысить откат.

Я пробовал это, но он обновляет только school_code:

class PartialsController < ApplicationController
  def update_school_and_teacher_code
    School.transaction do 
       school = School.find_by_school_code(3)
       if school.school_code == 3
         school.update_attributes!(:school_code => 2)
         teacher = Teacher.update(:teacher_code => 2)
         student = Student.update(:student_code => 2)
       else
        raise ActiveRecord::Rollback
      end
    end
  end
end

и вывод:

   (0.2ms)  BEGIN
  School Load (0.2ms)  SELECT  "schools".* FROM "schools" WHERE "schools"."school_code" = $1 LIMIT $2  [["school_code", 3], ["LIMIT", 1]]
  School Update (0.4ms)  UPDATE "schools" SET "school_code" = $1, "updated_at" = $2 WHERE "schools"."id" = $3  [["school_code", 2], ["updated_at", "2019-05-30 11:05:30.040902"], ["id", 5]]
  Teacher Load (0.4ms)  SELECT "teachers".* FROM "teachers"
  Student Load (0.4ms)  SELECT "students".* FROM "students"
  Course Load (0.2ms)  SELECT  "courses".* FROM "courses" WHERE "courses"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  Course Load (0.3ms)  SELECT  "courses".* FROM "courses" WHERE "courses"."id" = $1 LIMIT $2  [["id", 3], ["LIMIT", 1]]
   (40.7ms)  COMMIT

Что не совсем правильно, это только обновление school_code.

...