我目前正在学习如何将条带集成到一个简单的rails应用程序中,并且不确定什么是允许用户在不同产品中进行选择的最佳方式。现在我的设置是我在索引页面列出了我的所有产品,用户可以选择他们想要购买的产品
index.html.haml
<% @products.each do |product|%>
<%= product.description%>
<%= product.price%>
# Stripe payment button
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="A month's subscription"
data-amount= <%= product.price*100%>
data-locale="auto"></script>
<% end %>
但是,列出的data-amount
不是客户支付的实际金额,因为这是在控制器中确定的
产品控制器
class ProductsController < ApplicationController
def index
@products = Product.all
end
def create
# Amount in cents
@amount = 500
customer = Stripe::Customer.create(
:email => 'example@stripe.com',
:card => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Rails Stripe customer',
:currency => 'usd'
)
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to charges_path
end
end
如您所见,由于@amount=500
,每件商品的收费均为5美元。如何将控制器中的@amount
动态更改为每个产品的价格?我在考虑使用每个产品的ID,但我不能简单地调用@product = Product.find(params[:id])
因为我没有参数,因为这是索引页。
答案 0 :(得分:0)
在你的控制器中,
您可以通过以下方式获取产品:
@product = Product.find_by(id: params[:product_id])
然后,只需使用:
@product.amount
而不是使用固定的@amount