Всем добрый вечер,
Я пытался решить это какое-то время, я уверен, что это что-то очень простое, чего мне не хватает...
В настоящее время у меня есть интернет-магазин, он позволяет покупателям добавлять товары в корзину, которая затем позволяет покупателям платить через PayPal.
Нет проблем, если я попытаюсь заплатить «изнутри» корзины, E.G.
http://localhost:3000/carts/1
Тем не менее, я создал частичное отображение всех элементов корзины (это частичное отображение в раскрывающемся списке на панели навигации), и в этом раскрывающемся списке покупатель должен иметь возможность щелкнуть «оформить заказ». С целью, чтобы он работал так же, как и в тележке; это должно привести их прямо к 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, как и должно быть; это просто не делается на остальной части сайта, только в представлениях корзины (только показ, а не индекс).
Пожалуйста, простите меня, если это будет так просто, как я полагаю, прошло несколько месяцев с тех пор, как я играл с рельсами, и с самого начала я был не так хорош!