晚上好,
我一直试图解决这个问题,我很肯定这是一件非常简单的事情,我不知道......
我目前有一个网上商店,它允许客户将产品添加到购物车,然后允许客户通过PayPal付款。
如果我试图从'内付款,那就没有问题。推车,E.G
http://localhost:3000/carts/1
但是,我创建了一个部分显示所有购物车项目(此部分显示在导航栏的下拉列表中),并且从此下拉菜单中,客户应该能够点击&#39 ;结帐&#39 ;.其目的是以与进入购物车相同的方式工作;它应该直接让PayPal支付。这部分内容如下。
_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;它只是在网站的其他部分没有这样做,只在购物车视图中显示(仅显示,而不是索引)。
请原谅我,如果它变得像我想象的那样简单,那我已经有几个月了,因为我玩铁轨,我开始并不是那么好与!
答案 0 :(得分:1)
您收到错误是因为未设置@cart
。目前,其值在部分_display_cart.html.erb
内为零。确保在渲染此部分之前设置@cart
的值。
例如:
在呈现完整页面的动作中设置@cart
的值(在其中呈现部分页面)。
在呈现部分内容时将@cart传递给locals
:
<%= render :partial => 'display_cart', :locals => {:cart => @cart} %>
并部分访问cart
而不是@cart
。
<强>更新强>
OP想要查看他在current_cart
已经拥有的当前购物车内容。
只需更新链接
即可<%= link_to "Checkout", @cart.paypal_url(products_url) %>
要
<%= link_to "Checkout", current_cart.paypal_url(products_url) %>