【问题标题】:Rails 5, does the create method run even if model validation fails?Rails 5,即使模型验证失败,create方法也会运行吗?
【发布时间】:2017-02-04 23:21:34
【问题描述】:

我有一个 Rails 5 应用程序。

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

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

我需要每个订单的邮政编码,因此我的订单模型中有一个验证

validates :zip, presence: true

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-19
      • 2018-12-23
      • 2011-02-11
      • 2014-01-13
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多