Таким образом, в настоящее время у меня есть эта функция бронирования, к которой я пытаюсь добавить платежную систему, используя Stripe
Однако, когда я пытаюсь отправить форму данных моей кредитной карты, я получаю эту ошибку:
NoMethodError (undefined method `customer_id' for #<User:0x552abc0>):
app/services/credit_card_service.rb:8:in `create_credit_card'
app/controllers/charges_controller.rb:9:in `create'
Когда я смотрю на код в файлах, которые указаны в приведенной выше ошибке, вот что там:
#app/controllers/charges_controller.rb
class ChargesController < ApplicationController
before_action :authenticate_user!
before_action :find_product
def create
stripe_card_id =
if params[:credit_card].present?
CreditCardService.new(current_user.id, card_params).create_credit_card
else
charge_params[:card_id]
end
Stripe::Charge.create(
customer: current_user.customer_id,
source: stripe_card_id,
amount: @booking.price_in_cents,
currency: 'usd'
)
if params[:credit_card].present? && stripe_card_id
current_user.credit_cards.create_with(card_params).find_or_create_by(stripe_id: stripe_card_id)
end
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to @booking
end
private
def card_params
params.require(:credit_card).permit(:number, :month, :year, :cvc)
end
def charge_params
params.require(:charge).permit(:card_id)
end
def find_product
@booking = Booking.find(params[:booking_id])
rescue ActiveRecord::RecordNotFound => e
flash[:error] = 'Booking not found!'
redirect_to root_path
end
end
и
class CreditCardService
def initialize(user_id, card)
@user = User.find(user_id)
@card = card
end
def create_credit_card
customer = Stripe::Customer.retrieve(@user.customer_id)
customer.sources.create(source: generate_token).id
end
def generate_token
Stripe::Token.create(
card: {
number: @card[:number],
exp_month: @card[:month],
exp_year: @card[:year],
cvc: @card[:cvc]
}
).id
end
end
Любая помощь или советы о том, как решить эту проблему, будет принята с благодарностью.
Я использовал devise для входа в систему / регистрации пользователя