Rails在索引页

时间:2015-09-06 20:42:11

标签: ruby-on-rails

我目前正在学习如何将条带集成到一个简单的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])因为我没有参数,因为这是索引页。

以上代码取自Stripe's rails checkout guide

1 个答案:

答案 0 :(得分:0)

在你的控制器中,

您可以通过以下方式获取产品:

@product = Product.find_by(id: params[:product_id])

然后,只需使用:

@product.amount 

而不是使用固定的@amount