В корзину Rails не добавляются и / или не отображаются нужные товары

#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)