Rails-如何在Forms with Rails中显示错误

问题描述 投票:0回答:1

routes.rb

Rails.application.routes.draw do
  devise_for :users

  resource :user, only: [] do
    resources :bookings, only: [:index], module: :users
  end

  resources :spaces, only: [:index, :new, :create, :show] do
    resources :bookings, shallow: true do
      resources :payments, only: :new, shallow: true do
        collection do
         get :success
        end
      end
    end
  end


  root to: 'pages#home'

end

booking / new.html.erb

(...)
<%= form_with(model: [@space, @booking], local: true) do |f| %>
  <%= label_tag :check_in, "Check in" %>
  <%= f.date_field :check_in, class: "form-control" %>
  <%= label_tag :check_out, "Check out" %>
  <%= f.date_field :check_out, class: "form-control" %>

  <%= submit_tag "Reserve", class: "btn btn-primary %>
<% end %>
(...)

这是控制器:

bookings_controller.rb

(...)

  def new
    @space = Space.find(params[:space_id])
    @booking = Booking.new
    @query1 = session[:query1]
    @query2 = session[:query2]
  end

  def create
    @space = Space.find(params[:space_id])
    booking  = Booking.create!(booking_params)

    session = Stripe::Checkout::Session.create(
      payment_method_types: ['card'],
      line_items: [{
        name: @space.address,
        images: [@space.photo],
        amount: @space.price_cents * (1 + (booking.check_out - booking.check_in).to_i),
        currency: 'gbp',
        quantity: 1
      }],
      success_url: success_booking_payments_url(booking),
      cancel_url: new_booking_payment_url(booking) 
      )

    booking.update_attribute(:checkout_session_id, session.id)
    redirect_to new_booking_payment_path(booking)
  end


  private

  def booking_params

    params.require(:booking).permit(:check_in, :check_out).merge(state: 'pending', amount: @space.price, user: current_user, space: @space)
  end
end

在bookings#create中,我通常会做类似的事情:

@@ booking = Booking.new(booking_params)

如果@ booking.saveredirect_to(...)其他渲染:new结束

这里我正在使用@booking = Booking.create!(booking_params),因为我需要Stripe success_url的booking_id。

一切正常,但是我想用显示的错误而不是ActiveRecord::RecordInvalid in BookingsController#create来呈现表单>

routes.rb Rails.application.routes.draw do devise_for:users资源,仅用户:[] do resources:bookings,仅:[:index],module::users终端资源:spaces,仅:[:index ,:new,:...

ruby-on-rails ruby ruby-on-rails-5 stripe-payments
1个回答
0
投票

create!引发错误,create不会引发错误。

© www.soinside.com 2019 - 2024. All rights reserved.