Каждая квитанция о покупке заполнена одной и той же информацией о продукте - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть магазин, где вы можете купить цифровые продукты через загрузку.Каждый купленный продукт (я тестировал несколько продуктов) отображает одну и ту же информацию о продукте (title, art_link и download_url) на странице благодарности сразу после покупки.

Что я делаю здесь неправильно, что мешает емузагрузка правильных данных из только что купленного пакета?

Я использую Stripe для платежей.Все остальное работает отлично, деньги проходят, электронное письмо отправляется и ссылки на квитанцию, UUID работает и т. Д.

ОБНОВЛЕНИЕ: Я проверил свою БД и все сохраняетсяправильно.Единственная проблема заключается в том, что представление purchases/show не воспроизводится должным образом.

покупок / шоу:

<p><b><%= @pack.title %></b></p>
<%= image_tag("#{@pack.art_link}", :alt => "#{@pack.title} sound library.", :width => 330, :height => 330, class: "img-center img-responsive shade") %>
<p><a class="btn btn-success top-drop" href="<%= @pack.download_url %>" target="_blank">Download Files</a></p>

контроллер покупок:

def show
  @purchase = Purchase.find_by_uuid(params[:id])
  @pack = Pack.find(@purchase.product_id)
  set_meta_tags noindex: true
end

Модель покупки:

attr_accessor :download_token
after_create :email_purchaser

def to_param
  uuid
end

def email_purchaser
  PurchaseMailer.purchase_receipt(self).deliver
end

def Purchase.new_token
  SecureRandom.urlsafe_base64
end

def create_download
  self.download_token = Purchase.email.new_token
  update_attribute(:download, Purchase.email(download_token))
  update_attribute(:download_sent_at, Time.zone.now)
end

char_controller:

def create
  pack = Pack.find(params[:product_id])

  customer = Stripe::Customer.create(
    :email => params[:stripeEmail],
    :source  => params[:stripeToken],
  )

  # Amount in cents
  charge = Stripe::Charge.create(
    :customer    => customer.id,
    :amount      => pack.price_in_cents,
    :description => 'Rails Stripe customer',
    :currency    => 'usd',
  )

  purchase = Purchase.create(
    email: params[:stripeEmail],
    card: params[:stripeToken],
    amount: pack.price_in_cents,
    description: charge.description,
    currency: charge.currency,
    customer_id: customer.id,
    product_id: pack.id,
    uuid: SecureRandom.uuid,
  )

  redirect_to purchase

rescue Stripe::CardError => e
  flash[:error] = e.message
  redirect_to new_charge_path
end

Большое спасибо, это действительно менязастрял.

Routes.rb:

resources :packs, :path => 'products'
resources :charges
resources :purchases, only: [:show]

1 Ответ

0 голосов
/ 29 декабря 2018

Проблема была решена в чате.

В routes.rb были следующие строки:

get 'purchase' => 'purchases#show', as: 'purchase' 
...
resources :purchases, only: [:show]

Поэтому, когда OP вызывал: redirect_to purchase URL был:

http://localhost:3000/purchase.4c77a556-299e-4611-b683-3ff6eb672738

С этого момента params[:id] был nil.В БД было 4 покупки с UUID, равным nil, и первая всегда возвращалась (потому что find_by возвращает первую найденную запись).

...