1. ホーム
  2. ruby-on-rails

[解決済み] Railsはsaveでモデル内の検証をスキップしますか?

2022-02-10 02:18:29

質問

以下のようなRailsのコードを持っています。

def charge_card
  return charge_on_house if house_account?
  assign_order_number
  if credit_card?
    begin
      save!   #==>here
      charge = Stripe::Charge.create(
        amount: (total.to_f * 100).ceil,
        currency: 'usd',
        customer: customer.stripe_id,
        card: payment_method,
        description:"Saint Germain Order: #{self.number}"
      )
      self.update(
        payment_status: 'paid'
      )
      self.finish!
    rescue Stripe::StripeError => e
      self.update(
        admin_comments: e.message,
      )
      self.decline!
    ensure
      notify_user
    end
  end
  self.save!
end

保存時のバリデーションをスキップしたいのですが、6行目でエラーメッセージが表示されてしまいます。

どうすればいいですか?

save! バリデーションは常に実行されます。もしどれかが失敗したら ActiveRecord::RecordInvalid が発生します。

試す

.save(validate: false)