Не удалось найти товар без идентификатора с помощью Stripe - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь завершить настройку платежа в Ruby, но пытаюсь открыть экран подтверждения заказа для печати.Я настроил свой частичный для оплаты как таковой.

<script
  src="https://checkout.stripe.com/checkout.js" class="stripe-button"
  data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
  data-image="<%= asset_path(@product.image_url) %>"
  data-name="<%= @product.name %>"
  data-description="<%= @product.description %>"
  data-amount="<%= @product.price*100.to_i %>">
  </script>

Мой контроллер платежей.

    class PaymentsController < ApplicationController
  before_action :authenticate_user!

  def create
    @product = Product.find(params[:product_id])
    @user = current_user
    token = params[:stripeToken]
    # Create the charge on Stripe's servers - this will charge the user's card
    begin
      charge = Stripe::Charge.create(
        amount: @product.price, # amount in cents, again
        currency: "eur",
        source: token,
        description: params[:stripeEmail]
      )

    if charge.paid
      UserMailer.order_confirmation(@user, @product).deliver_now
      Order.create!(
        :product_id => @product.id,
        :user_id => @user.id,
        :total => @product.price_show
      )
        flash[:success] = "Your payment was processed successfully"
    end

    rescue Stripe::CardError => e
      body = e.json_body
      err = body[:error]
      flash[:error] = "Unfortunately, there was an error processing your payment: #{err[:message]} Your card has not been charged. Please try again."
    end
    redirect_to product_path(@product), notice: "Thank you for your purchase."
  end
end

и файл моих маршрутов.

Rails.application.routes.draw do
  devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout' },
  controllers: {registrations: "user_registrations"}

  resources :products do
    resources :comments
end

post 'payments/create'

  resources :users
  resources :orders, only: [:index, :show, :create, :destroy]
  resources :users, except: [:index]
  get 'simple_pages/about'
  get 'simple_pages/contact'
  root 'simple_pages#landing_page'
  post 'simple_pages/thank_you'
  mount ActionCable.server => '/cable'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

Форма внутри продукта show.html.erb

<%= form_with(url: '/payments/create') do |form| %>
  <%= render partial: "shared/stripe_checkout_button" %>
   <%= hidden_field_tag(:product_id, @product.id) %>
<% end %>

Однако, когда я пытаюсь завершить тестовый платеж, у меня появляется всплывающее окно с сообщением «Не удалось найти продукт без идентификатора».Я думал, что это было определено в разделе создания, но я не уверен, как это исправить.Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 25 сентября 2018

* * * * * * * * * * * * * * * * * * * * * * * * * * :product_id 1004 * 1.Быстрое решение:

URL-адрес вашей формы может выглядеть следующим образом:

<%= form_with(url: "/payments/create?#{product_id=@product.id}") do |form| %>

2.Better Way:

Настройка маршрутов для платежей уже имеет идентификатор продукта:

# routes.rb

  resources :products do
    resources :comments
    resources :payments
  end

URL-адрес формы:

<%= form_with(url: product_payments_path(@product)) do |form| %>
...