我使用Rails構建一個Event應用程序。我最近改變了我的預訂控制器,以適應免費的活動。應用程序的這一面似乎工作正常,但當我嘗試爲付費活動進行測試預訂時,應用程序在完成付款提交表單後默認爲「預訂不成功」。Rails錯誤 - 訂閱失敗
我不確定爲什麼會發生這種情況。這裏是我的控制器邏輯 -
def new
@event = Event.find(params[:event_id])
@booking = Booking.new
@booking.user = current_user
end
def create
@event = Event.find(params[:event_id])
@booking = Booking.new(booking_params)
@booking.user = current_user
if
@booking.save
flash[:success] = "Your place on our event has been booked"
redirect_to event_booking_path(@event, @booking)
else
flash[:error] = "Booking unsuccessful"
render "new"
end
end
def show
@event = Event.find(params[:event_id])
@booking = Booking.find(params[:id])
end
def update
if @booking.update(booking_params)
redirect_to event_booking_path(@event, @booking) , notice: "Booking was successfully updated!"
else
render 'new'
end
end
private
def booking_params
params.require(:booking).permit(:stripe_token, :booking_number, :quantity, :event_id, :stripe_charge_id, :total_amount)
end
而且在我的模型我有這個 -
Booking.rb
class Booking < ActiveRecord::Base
belongs_to :event
belongs_to :user
before_create :set_booking_number
validates :quantity, presence: true, numericality: { greater_than_or_equal_to: 0 }
validates :total_amount, presence: true, numericality: { greater_than_or_equal_to: 0 }
validates :quantity, :total_amount, :booking_number, presence: true
def set_booking_number
self.booking_number = "MAMA" + '- ' + SecureRandom.hex(4).upcase
end
def booking
# Don't process this booking if it isn't valid
self.valid?
if booking.is_free?
self.total_amount = event.price_pennies.nil?
save!
end
begin
self.total_amount = event.price_pennies * self.quantity
charge = Stripe::Charge.create(
amount: total_amount,
currency: "gbp",
source: stripe_token,
description: "Booking created for amount #{total_amount}")
self.stripe_charge_id = charge.id
self.booking_number = "MAMA" + '- ' + SecureRandom.hex(4).upcase
save!
rescue Stripe::CardError => e
errors.add(:base, e.message)
false
end
end
end
所以,由於某種原因,它不保存或還有別的東西不對。任何援助讚賞。
看到錯誤消息對視圖通過顯示驗證錯誤。 'flash [:error] = @ booking.errors.full_messages.join(',')' – usha
您的代碼看起來不完整...不確定您預訂模型中的預訂方法從哪裏調用,但它看起來不是從你的控制器。也可以很方便地看到你的模型中有什麼驗證。 – David
全預訂型號代碼現在添加了驗證。有什麼想法嗎?而不是booking.is_free?它應該是一個帶有event.is_free的if/else語句嗎?那麼'其他'付費方法代碼? (見下面的其他評論) –