Я хочу использовать метод транзакций в рельсах, где, если мой 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
.