【发布时间】:2014-04-09 07:41:44
【问题描述】:
大家晚上好,
我一直在尝试解决这个问题,我很确定这是我所缺少的非常简单的东西......
我目前有一个网上商店,它允许客户将产品添加到购物车,然后允许客户通过 PayPal 付款。
如果我尝试从购物车中的“E.G”付款没有问题
http://localhost:3000/carts/1
但是,我创建了一个显示所有购物车项目的部分(此部分显示在导航栏的下拉列表中),并且客户应该能够从该下拉列表中单击“结帐”。目的是它的工作方式与进入购物车的方式相同;它应该把他们直接带到贝宝支付。这部分在下面。
_display_cart.htlm.erb
<% current_cart.line_items.each do |item| %>
<li> <%= item.product.title %>
<%= number_to_currency item.product.price , :unit =>"£" %> × <%= item.quantity %> </li>
<% end %>
<div align="right">
<%= number_to_currency(current_cart.grand_total, :unit => "£") %>
</div>
</ul>
<%= link_to "Checkout", @cart.paypal_url(products_url) %>
如果我从产品展示页面将商品添加到购物车,同时以下内容已到位:
<%= link_to "Checkout", @cart.paypal_url(products_url) %>
我得到一个未定义的方法错误:
undefined method `paypal_url' for nil:NilClass
然而paypal_url是在cart.rb中定义的,如下。
def paypal_url(return_url)
values = {
:business => 'EMAIL',
:upload => 1,
:return => return_url,
:invoice => id
}
line_items.each_with_index do |item, index|
values.merge!({
"amount_#{index+1}" => item.product.price,
"item_name_#{index+1}" => item.product.title,
"item_number_#{index+1}" => item.id,
"quantity_#{index+1}" => item.quantity
})
end
"https://www.sandbox.paypal.com/cgi-bin/webscr?" + values.to_query
end
有趣的是,如果我进入 localhost:3000/carts/1,我的导航栏中的下拉菜单可以完美运行,并且该错误不再阻止我访问该站点。然后导航栏下拉菜单中的结帐按钮将我带到PayPal;它只是不在网站的其余部分这样做,仅在购物车视图中(仅显示,而不是索引)。
如果它会像我想象的那么简单,请原谅我,我已经有几个月没有玩铁轨了,而且我一开始就不是那么好!
【问题讨论】:
标签: ruby-on-rails paypal ruby-on-rails-3.2 partials