Rails 5,即使模型验证失败,create方法也会运行吗?

时间:2017-02-04 23:21:34

标签: ruby-on-rails validation ruby-on-rails-5

我有一个Rails 5应用程序。

我有一个带有create方法的订单控制器,可以保存来自表单提交的新订单。订单的一个字段是邮政编码,在我的创建方法中,我使用邮政编码来计算运费。

def create
  @order = Order.new(order_params)
  shipping = calculateShipping(@order.zip)
  ...
end

我需要每个订单的邮政编码,以便在订单模型中进行验证

validates :zip, presence: true

如果我现在提交没有邮政编码的订单,我会从calculateShipping收到错误,因为它错过了邮政编码。

  1. 我认为验证首先运行,如果表单无效,甚至不会调用create方法。为什么我仍然会收到错误?我该怎么做才能解决它?
  2. 我应该将运费计算计算在模型中吗?那怎么样?
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以这样做:尝试从参数创建订单,如果不成功,则重新显示新表单(有错误)。

def create
  @order = Order.new(order_params)
  @order.calc_shipping
  if @order.save
    redirect_to @order, notice: 'Order was successfully created.'
  else
    render :new
  end
end

在订单模型中,您可以使用方法计算运费

def calc_shipping
  self.shipping = ...
end