我有一个门票模型,用户可以从给定的序列号开始连续购买门票。用户选择他们想要购买的门票数量,控制器将生成相应数量的门票并存储在数据库中。然而,如果一张门票保存失败,事务应该回滚,但在这种情况下没有回滚。
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
...
此外,重定向是正确的,但没有任何通知显示出来。
render json: @ticket.errors
给你返回了一个数组,但在我的编辑中不再是这种情况,这可能是原因。 - apneadiving