平衡支付-路由错误



对于我的应用程序,我有用户。我正试图利用平衡支付,让用户保存他们的信用卡信息,以供以后使用。我已经按照下面的两个链接作为指导,目前有以下错误:

Routing Error
No route matches [POST] "/store_credit_card"

我遵循这个GIST和Rails表单提交处理程序没有被执行。

  • balanced_controller.rb - created
  • _credit_card_form.html.haml -创建并放到app>view>balanced
  • credit_card_submission.js -创建并放到app>assets>javascript
  • 在我的用户模型中增加了一个字段:balanced_account_uri string
  • 替换了.js文件中平衡市场uri
  • 的占位符文本
  • 更新路线。rb
  • 中的方法

有人知道为什么它不工作吗?

routes.rb

resources :users do
    resources :balanced do
      member do
        post :store_credit_card, :create_balanced_account
      end
    end
end

视图/用户/edit.html.erb

<div class = "container">
<script type="text/javascript" src="https://js.balancedpayments.com/v1/balanced.js"></script>
<script type="text/javascript">
    balanced.init('YOUR MARKETPLACE URI HERE');
</script>
<%= render 'balanced/credit_card_form' %>
</div>

视图/平衡/_credit_card_form.html.haml

= form_tag "/store_credit_card", :method => :post, :id => "credit-card-form", :class => "form-horizontal" do
  .control-group
    = label_tag "cc-number", "Card Number", :class => "control-label"
    .controls
      = text_field_tag "cc-number", nil, :placeholder => "Enter Credit Card Number", :class => "cc-number", :autocomplete => "off"
  .control-group
    = label_tag "cc-em", "Expiration", :class => "control-label"
    .controls
      = text_field_tag "cc-em", nil, :placeholder => "Expiration Month", :class => "cc-em", :autocomplete => "off"
      = text_field_tag "cc-em", nil, :placeholder => "Expiration Year", :class => "cc-ey", :autocomplete => "off"
  .control-group
    = label_tag "cc-csc", "Security Code", :class => "control-label"
    .controls
      = text_field_tag "cc-csc", nil, :placeholder => "Security Code", :class => "cc-csc", :autocomplete => "off"
  .control-group
    .controls
      = submit_tag "Submit", :class => "btn btn-primary btn-large"

资产/javascript/credit_card_submissions.js

var marketplaceUri = 'YOUR MARKETPLACE URI HERE';
var requestBinUrl = '/store_credit_card'

var debug = function(tag, content) {
  $('<' + tag + '>' + content + '</' + tag + '>').appendTo('#result');
};
try {
balanced.init(marketplaceUri);
} catch (e) {
debug('code', 'balanced.init error!');
}
function balancedCallback(response) {
var tag = (response.status < 300) ? 'pre' : 'code';
debug(tag, JSON.stringify(response));
switch(response.status) {
    case 201:
        console.log(response.data);
        var $form = $("#credit-card-form");
        var card_token_uri = response.data['uri'];
        $('<input>').attr({
            type: 'hidden',
            value: card_token_uri,
            name: 'balancedCreditCardURI'
        }).appendTo($form);
        $form.attr({action: requestBinUrl});
        $form.get(0).submit();
        break;
    case 400:
        console.log(response.error);
        break;
    case 404:
        console.log(response.error);
        break;
}
}
var tokenizeCreditCard = function(e) {
e.preventDefault();
var $form = $('#credit-card-form');
var creditCardData = {
    card_number: $form.find('.cc-number').val(),
    expiration_month: $form.find('.cc-em').val(),
    expiration_year: $form.find('.cc-ey').val(),
    security_code: $form.find('.cc-csc').val()
};
balanced.card.create(creditCardData, balancedCallback);
};
$(function(){
$('#credit-card-form').submit(tokenizeCreditCard);
});

balanced_controller.rb

class BalancedController < ApplicationController
  def create_balanced_account
    current_user.balanced_account_uri = Balanced::Marketplace.my_marketplace.create_account(:email => current_user.email, :type => 'person').uri
    current_user.save
    # add a redirect to the desired path
    redirect_to root_url
  end
  def store_credit_card
    balanced_account = Balanced::Account.find(current_user.balanced_account_uri)
    balanced_account.add_card(params[:balancedCreditCardURI])
    # add a redirect to the desired path
    redirect_to root_url
  end
  def store_bank_account
    balanced_account = Balanced::Account.find(current_user.balanced_account_uri)
    balanced_account.add_card(params[:balancedBankAccountURI])
    # add a redirect to the desired path
    redirect_to root_url
  end
  def process_payment
    balanced_account = Balanced::Account.find(current_user.balanced_account_uri)
    account.debit(
      :amount => 1000, # or params[:amount]
      :description => "Balanced Payments transaction",
      :appears_on_statement_as => "Balanced Payments")
    # add a redirect to the desired path
    redirect_to root_url
  end
end

根据您的路由,您的帖子路径不会是"/store_credit_card",而是"users/:user_id/balanced/:balanced_id/store_credit_card"之类的东西

所以你需要改变form_tag "/store_credit_card"来匹配它。

运行rake routes查看当前定义的路由

另外,你可以使用路由生成的url帮助器,而不是form_tag中的字符串:

form_tag users_balanced_store_credit_card_path(@user, @balanced)

上面可能是错误的,rake routes会告诉你确切的路径和助手名称。

最新更新