如何在我的Ruby On Rails应用程序中添加店内信用

时间:2015-10-10 09:18:14

标签: ruby-on-rails

我想为我的应用添加商店信用,例如fiverr或其他在线市场,用户可以在其帐户中获得一些信用或金钱。是否有任何宝石或一些建议的步骤来帮助我建立这个?

1 个答案:

答案 0 :(得分:1)

信用有点紧张,因为你必须与实际资金保持平衡。当你进入那个世界时,你需要确保应用程序正常运行。

尽管如此,你必须设置一个额外的模型和其他一些东西才能让它发挥作用。

您需要的两个方面是存储(模型)和付款(接受资金的机制)。这些将允许您的应用程序接受付款,然后有办法存储它们(给你一个平衡工作)。

设置不会过于复杂;您将拥有付款模型,该模型只会存储用户发送的所有资金 - 您将能够通过User模式获得余额:

<强>存储

#app/models/user.rb
class User < ActiveRecord::Base
   #columns id | username | email | etc etc etc
   has_many :payments

   def balance
      payments.sum(:value) #-> @user.balance -> "25"
   end
end

#app/models/payment.rb
class Payment < ActiveRecord::Base
   #columns id | user_id | value | currency | transaction_id | created_at | updated_at
   belongs_to :user
end

这将使您能够进行以下设置:

#users
id username   email
1  joe_bloggs joe_bloggs@yahoo.com

#payments
id user_id value currency transaction_id
1  1       17.00 USD      XB56YTSG3F5F
2  1        7.00 USD      YU8953FG5RED
3  1       -5.00 USD      NIL

此处需要注意的重要事项之一是付款模型中的transaction_id。这很重要,因为它允许您将交易数据(IE支付信息)留给您使用的提供商(详见下文)。

许多开发人员的一个典型问题是尝试存储他们自己的所有数据。虽然这为他们提供了很好的数据集,但这也意味着你必须保持这一切。为您的付款存储 transaction_id

您还会注意payments#3中的负值。这是为了演示用户到用户的付款(IE <店内信用的消费)。这必须得到解决,但这可能会在以后发生。

-

付款

第二个难题是使用支付处理器。

最喜欢的是stripe,但还有其他人,比如Paypal等。

就条纹而言,设置它非常重要。但是,如果你正确地玩牌,你将能够使用以下设置来完成:

#config/routes.rb
resource :profile do
   resources :payments #-> url.com/profile/payments/new
end

#app/controllers/payments_controller.rb
class PaymentsController < ApplicationController
    before_action :authenticate_user! #-> if using Devise, which is highly recommended

    def index
        @payments = current_user.payments
    end

    def new
       @payment = Payment.new #-> has to work with stripe, that's another question
    end

    def create
       @payment = Payment.new payment_params #-> this should take the stripe return data & save it in your model
       @payment.save
    end

    private

    def payment_params
       params.require....
    end
end

重要的一点。

Stripe仅提供功能来接收付款。您的Payment模型应将您的交易存储在您的数据集中。

如上所述,聪明的做法是将交易数据保存在付款处理器中,并根据需要参考transaction_id。但是,您必须将付款数据存储在您自己的数据库中才能使其正常工作。

此类功能有许多预先打包的解决方案: