未定义的方法' paypal_url'从部分

时间:2014-04-08 19:34:09

标签: ruby-on-rails paypal ruby-on-rails-3.2 partials

晚上好,

我一直试图解决这个问题,我很肯定这是一件非常简单的事情,我不知道......

我目前有一个网上商店,它允许客户将产品添加到购物车,然后允许客户通过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 =>"&pound" %> &times; <%= item.quantity %> </li>
<% end %>

<div align="right">
 <%= number_to_currency(current_cart.grand_total,  :unit => "&pound;") %>&nbsp;
</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;它只是在网站的其他部分没有这样做,只在购物车视图中显示(仅显示,而不是索引)。

请原谅我,如果它变得像我想象的那样简单,那我已经有几个月了,因为我玩铁轨,我开始并不是那么好与!

1 个答案:

答案 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) %>
相关问题