Я использую метод, чтобы попытаться умножить две переменные следующим образом -Рубин - как преумножить переменные в методе
def total_amount
self.quantity.to_i * self.event.price.to_i
end
Я строю приложение событий с использованием Ruby On Rails и цель из метод позволяет одному пользователю записывать несколько мест для платного события.
Метод просто не работает, когда я нажимаю, чтобы сделать платеж, сумма просто отображается как 0 (ноль). Метод в моей модели бронирования, в моем контроллере заказа У меня есть следующий код -
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
У меня есть входное пространство на моей форме events.show, которая позволяет пользователю ввести количество пробелов, они требуют. Форма заказа, имеет следующую строку кода, который должен отражать общую сумму, необходимую -
<p>Total Amount<%= @booking.total_amount %></p>
я добавил .to_i
к обоим переменным, как и без этого я получил ошибку NilClass. Как я могу изменить это, чтобы метод создавал правильный результат?
'nil.to_i' равен нулю, так что, если любой из этих значений равна нулю, умножение будет возвращать ноль. –
В попытках, которые я использовал, ни один из них не был бы равен нулю. Я использовал 2 для количества и £ 1.50 за цену. Но выход был равен нулю. –
Скорее всего, это символ валюты. '1.50'.to_i' равно 1,' 1.50'.to_f' равно 1.50, а '' 1,50'.to_i' равно 0. Вот как работает преобразование ruby string-to-integer. Вы должны использовать поплавки для валюты и вытеснять '£' перед конвертированием –