2012-01-14 47 views
0

我正在使用Rails 3.1和paypal_adaptive(https://github.com/tc/paypal_adaptive)gem来向PayPal发出API请求。这是协议:我有一个请求,我正在向控制器中的PayPal进行交易。我有一个Items(这里是@items)的集合,我试图为该集合中的每个项目添加收件人。这是我的代码:如何把内联的Ruby每个循环放在外部请求中?

pay_request = PaypalAdaptive::Request.new 

data = { 
    "returnUrl" => "http://testserver.com/payments/completed_payment_request", 
    "requestEnvelope" => {"errorLanguage" => "en_US"}, 
    "currencyCode" => "USD", 
    "receiverList" => {"receiver"=>[ 
    @items.each do |item| 
     {"email"=>"#{Recipient.find_by_id(item.recip_id).email}", "amount"=>"#{item.price}"}, 
    end 
    ]}, 
    "cancelUrl"=>"http://testserver.com/payments/canceled_payment_request", 
    "actionType"=>"PAY", 
    "ipnNotificationUrl"=>"http://testserver.com/payments/ipn_notification" 
} 

pay_response = pay_request.pay(data) 

if pay_response.success? 
    redirect_to pay_response.approve_paypal_payment_url 
else 
    puts pay_response.errors.first['message'] 
    redirect_to failed_payment_url 
end 

...但这是行不通的。我该如何正确地将Ruby语法插入到此请求中?

(对不起,我在标题中含糊不清。我不确定我做什么样的请求(AJAX也许?))

回答

0

只是收集所有的物品放入一个变量,并设置为价值“接收者”键:

recipients = @items.each do |item| 
    {"email"=>"#{Recipient.find_by_id(item.recip_id).email}", "amount"=>"#{item.price}"} 
end 

... 

"currencyCode"=>"USD", 
"receiverList"=>{"receiver"=> recipients}, 
"cancelUrl"=>"http://testserver.com/payments/canceled_payment_request", 
+0

好主意。虽然我收到了一个错误:它给了我一堆语法错误,意想不到的',',期待keyword_end异常。你知道为什么会发生这种情况吗? – varatis 2012-01-14 04:36:49

+0

修正了我的例子。第二行有一个尾随的逗号。话虽如此,这是一个非常基本的问题。你可以节省自己很多时间等待这样的问题的答案,通过签出一本好的红宝书或资源(例如:Pickaxe书,它是免费的:http://ruby-doc.org/docs/ProgrammingRuby/ ) – 2012-01-15 21:18:20