Ruby on rails 验证失败时,创建不会回滚
控制器中的方法代码(Ruby on rails 验证失败时,创建不会回滚,ruby-on-rails,validation,Ruby On Rails,Validation,控制器中的方法代码(reservations\u Controller.rb): 型号中的代码(reservation.rb): validate:timeValidation,on::create 验证:时间验证,on::update def时间验证 如果expect_start_timetime.now+7天 错误。添加(:expect\u start\u time,“应该在7天之内”) elsif expect_return_time
reservations\u Controller.rb
):
型号中的代码(reservation.rb
):
validate:timeValidation,on::create
验证:时间验证,on::update
def时间验证
如果expect_start_timetime.now+7天
错误。添加(:expect\u start\u time,“应该在7天之内”)
elsif expect_return_time
在函数中,当执行@reservation.save时,将调用reservation模型中的验证函数。我希望当验证失败时,Reservation.create(Reservation_params)会回滚。然而,实际情况是这样的:
@reservation.save之前,已提交创建。但是我有
validate:timeValidation,on::create
。它应该会后退。为什么?发生这种情况是因为您同时添加了以下两项:
validate :timeValidation, on: :create
validate :timeValidation, on: :update
多次调用验证将覆盖以前的验证,请参阅
如果要对创建和更新事件执行验证,只需执行以下操作:
validate :timeValidation
同时执行
Reservation.new
而不是Reservation.create
为什么要使用create创建@Reservation并再次调用save?????
改变方法如下
def create_reserve
@reservation = Reservation.new(reservation_params) // change to new
...
if @reservation.valid? && @reservation.save // check if its valid?
....
end
end
如果问题仍然存在,请尝试以下操作
validate :timeValidation
def create_reserve
@reservation = Reservation.new(reservation_params) // change to new
...
if @reservation.valid? && @reservation.save // check if its valid?
....
end
end
validate :timeValidation, on: :create
validate :timeValidation, on: :update
def timeValidation
...
...
throw(:abort) if errors.present? // raise error if error present.
end