我正在使用Ruby On Rails构建一个事件应用程序。我正在拼命寻找一种方法来为用户处理多个预订 - 因此他们可以选择预订多个空间(目前他们一次只能预订一个),应用程序会将该数字转换为正确的价格(每张10英镑的10张门票将花费100英镑等。 在SO& S的帮助下谷歌,我看过我的bookings.rb模型中使用的一些方法,这是最新的 -
def total_amount
quantity.to_i * strip_currency(event.price)
end
private
def strip_currency(amount = '')
amount.to_s.gsub(/[^\d\.]/, '').to_f
end
我也试过了 -
def total_amount
self.quantity.to_i * self.event.price.to_f
end
当我点击付款页面时,这两种方法都返回0(零)。它基本上归结为英镑符号(或者我错过了其他东西?)。有人建议这个等式可能有效 -
string[0..-1].to_f
但是,我对此非常陌生,并且不确定如何将其集成到我的MVC代码中以便它可以工作。我没有使用货币化的宝石,我正在使用money-rails但是必须有一个简单的方法/代码行允许这种方法工作。
这是我的booking_controller -
class BookingsController < ApplicationController
before_action :authenticate_user!
def new
@event = Event.find(params[:event_id])
@booking = @event.bookings.new(quantity: params[:quantity])
@booking.user = current_user
end
def create
@event = Event.find(params[:event_id])
@booking = @event.bookings.new(booking_params)
@booking.user = current_user
Booking.transaction do
@event.reload
if @event.bookings.count > @event.number_of_spaces
flash[:warning] = "Sorry, this event is fully booked."
raise ActiveRecord::Rollback, "event is fully booked"
end
end
if @booking.save
# CHARGE THE USER WHO'S BOOKED
# #{} == puts a variable into a string
Stripe::Charge.create(
amount: @event.price_pennies,
currency: "gbp",
card: @booking.stripe_token,
description: "Booking number #{@booking.id}")
flash[:success] = "Your place on our event has been booked"
redirect_to event_path(@event)
else
flash[:error] = "Payment unsuccessful"
render "new"
end
if @event.is_free?
@booking.save!
flash[:success] = "Your place on our event has been booked"
redirect_to event_path(@event)
end
end
private
def booking_params
params.require(:booking).permit(:stripe_token, :quantity)
end
end
我用Ruby咆哮错误的树 - 我应该使用javascript吗?
答案 0 :(得分:1)
您已按预期工作的代码
调试并检查您为quantity
和event.price
amount = '£10'
quantity = 2
strip_currency(amount)
#=> 10.0
quantity.to_i * strip_currency(amount)
#=> 20.0
也许您没有获得适当数量或数量的值