2017-02-04 5 views
1

私はRails 5アプリを持っています。Rails 5では、モデルの検証に失敗してもcreateメソッドが実行されますか?

私は、フォーム提出の新しい注文を保存するcreateメソッドを持つ注文コントローラを持っています。注文の1つのフィールドは郵便番号であり、私の作成方法では配送コストを計算するために郵便番号を使用します。それが欠けているので、私は今、私はcalculateShippingからエラーを取得するZIPコードせずに注文を送信した場合、私は私の注文モデルに

validates :zip, presence: true 

を検証を持っているので、

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

私はすべての注文のために郵便番号が必要郵便番号

  1. フォームが有効でない場合、検証が最初に実行され、createメソッドが呼び出されないと考えました。なぜ私はまだエラーが発生するのですか?それを解決するために私は何ができますか?
  2. 送料の計算をモデルに入れる必要がありますか?どのように見えるだろうか?

ありがとう!

答えて

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 
を計算する方法を持っている可能性があり
関連する問題