2013-05-01 56 views
0

對於我的應用程序,我有用戶。我正在嘗試使用平衡付款功能,以允許用戶保存其信用卡信息以備後用。我按照下面爲指導的兩個環節,目前有以下錯誤:平衡付款 - 路由錯誤

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

我跟着這個GISTRails form submit handler not being executed

  • balanced_controller.rb - 創建
  • _credit_card_form.html.haml - 創建和app>view>balanced
  • credit_card_submission.js下放 - 創建並在替換佔位符文本我的用戶模型
  • app>assets>javascript
  • 增加了射門:balanced_account_uri string之下。平衡市場的js文件uri
  • 更新routes.rb for balanced_controlle中的方法r.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 
+0

我不是一個紅寶石的人,但你有路由引擎註冊你的路線? – griegs 2013-05-01 02:44:45

回答

0

根據你的路由你的帖子路徑不會"/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會告訴你確切的路徑和助手名。