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

Ruby on rails Rails 5,即使模型验证失败,create方法也会运行吗?,ruby-on-rails,validation,ruby-on-rails-5,Ruby On Rails,Validation,Ruby On Rails 5,我有一个Rails 5应用程序 我有一个订单控制器,它有一个create方法,可以保存来自表单提交的新订单。订单的一个字段是邮政编码,在我的create方法中,我使用邮政编码来计算运输成本 def create @order = Order.new(order_params) shipping = calculateShipping(@order.zip) ... end 我需要每个订单的邮政编码,以便在订单模型中进行验证 validates :zip, presence: tru

我有一个Rails 5应用程序

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

def create
  @order = Order.new(order_params)
  shipping = calculateShipping(@order.zip)
  ...
end
我需要每个订单的邮政编码,以便在订单模型中进行验证

validates :zip, presence: true
如果我现在提交一个没有邮政编码的订单,我会从calculateShipping中得到一个错误,因为它缺少邮政编码

  • 我认为验证首先运行,如果表单无效,甚至不调用create方法。为什么我仍然会出错?我能做些什么来解决它
  • 我应该在模型中加入运输成本计算吗?那会是什么样子

  • 谢谢

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

    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
    

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

    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