gpt4 book ai didi

ruby-on-rails - ActiveRecord 事务没有回滚整个事务

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:51 25 4
gpt4 key购买 nike

我有一个票模型,用户可以从给定的序列号开始连续购买票。用户选择他们想要购买的门票数量, Controller 生成该数量的门票并存储在数据库中。但是,如果一张票未能保存,事务应该回滚,但在这种情况下不会。

tickets_controller.rb

...
def create
number = params[:ticket_qty].to_i
@tickets = Array.new
number.times do |n|
t = Ticket.new(ticket_params)
t.serial_number = t.serial_number.to_i + n
@tickets.push(t)
end

respond_to do |format|
ActiveRecord::Base.transaction do
@tickets.each do |t|
if t.save
format.html { redirect_to tickets_path, notice: "#{number} #{"ticket".pluralize(number)} successfully created." }
format.json { render :show, status: :created, location: tickets_path }
else
format.html { render :new, notice: "Some tickets have errors, check the serial number range" }
format.json { render json: @ticket.errors, status: :unprocessable_entity }
end
end
end
end
end
...

重定向也正确,但没有显示任何通知。

最佳答案

要在出现错误时回滚事务,请将 t.save 替换为 t.save!

这会导致:

respond_to do |format|
begin
ActiveRecord::Base.transaction do
@tickets.each &:save!
format.html { redirect_to tickets_path, notice: "#{number} #{"ticket".pluralize(number)} successfully created." }
format.json { render :show, status: :created, location: tickets_path }
end
rescue ActiveRecord::ActiveRecordError => e
format.html { render :new, notice: "Some tickets have errors, check the serial number range" }
format.json { render json: e.message, status: :unprocessable_entity }
end
end

关于ruby-on-rails - ActiveRecord 事务没有回滚整个事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25886262/

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