Ruby - 如何在字符串中提取£符号以进行浮点转换

时间:2016-08-12 14:07:55

标签: javascript ruby-on-rails ruby ruby-on-rails-4 model-view-controller

我正在使用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吗?

1 个答案:

答案 0 :(得分:1)

您已按预期工作的代码

调试并检查您为quantityevent.price

获取的值
amount = '£10'
quantity = 2

strip_currency(amount) 
#=> 10.0

quantity.to_i * strip_currency(amount)
#=> 20.0

也许您没有获得适当数量或数量的值