#ruby-on-rails
#ruby-on-rails
Вопрос:
Я создаю очень простую корзину покупок с помощью руководства YouTube. Проблема, с которой я сталкиваюсь, заключается в том, что, хотя ссылка для добавления товара существует и перенаправляется в корзину без создания исключения, она всегда добавляет и показывает первый товар в списке (и если я уничтожу этот первый товар, появится следующий).).
Я знаю, что проблема заключается в методе add, который не хранит несколько идентификаторов продуктов, как следовало бы.
cart_controller.rb
class CartController < ApplicationController
def add
id = params[:id]
if session[:cart] then
cart = session[:cart]
else
session[:cart] = {}
cart = session[:cart]
end
if cart[:id] then
cart[:id] = cart[:id] 1
else
cart[:id] = 1
end
redirect_to cart_url
end
def clearCart
session[:cart] = nil
redirect_to cart_url
end
def index
if session[:cart] then
@cart = session[:cart]
else
@cart = {}
end
end
end
корзина index.html
<%= link_to 'Empty Your Cart', cart_clear_path %>
<% @cart.each do | id, quantity| %>
<% product = Product.find_by(id) %>
<ul>
<li><%= link_to product.title, product %></li>
</ul>
<% end %>
товары index.html
`<% @products.each do |product| %>`
<tr>
<td><%= product.title %></td>
<td><%= product.description %></td>
<td><%= product.image_url %></td>
<td><%= product.price %></td>
<td><%= product.category %></td>
<td><%= product.subcategory %></td>
<td><%= link_to 'Show', product %></td>
<td><%= link_to 'Edit', edit_product_path(product) %></td>
<td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<td><a href="/cart/<%= product.id %>">Add to Cart</a></td>
</tr>
<% end %>
Ответ №1:
Нашел решение сам. Действительно, метод add содержал проблему. Параметр :id уже сохранен в переменной id .
if cart[id] then
cart[id] = cart[id] 1
else
cart[id] = 1
Также изменена переменная product.
product = Product.find_by(id: id)