Guest User

Untitled

a guest
Jun 20th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. # Именование класса не соответствует соглашениям принятым в Rails а так же класс BasketController
  2. # не наследуется от базового класса всех контроллеров ApplicationController.
  3. class BasketController
  4.  
  5. # Поиск продуктов осуществляется по имени а не по уникальному для каждого продукта id.
  6. def add_to_basket
  7. item = Item.find_by_title(params[:item_title])
  8.  
  9. # Если существует возможность обойтись без глобальных переменных, то необходимо этой возможностью воспользоваться.
  10. # Для сохранения значения переменной лучше использовать cookies или session.
  11. basket = $basket
  12.  
  13. basket.add_item(item)
  14.  
  15. # Для подсчета количества позиций в корзине лучше использовать валидацию в модели.
  16. if basket.count_items > 10
  17. basket.error_messages.add("Слишком много товаров в корзине")
  18. end
  19.  
  20. total = 0
  21.  
  22. # Логику подсчета суммы вынести в отдельный метод модели.
  23. basket.items.each do |basket_item|
  24. total += basket_item.price
  25. end
  26.  
  27. session[:basket_total] = total
  28.  
  29. # За создание записей в базе данных должна отвечать модель. Для этого есть ActiveRecord.
  30. query = "INSERT INTO basket_items (basket_id, item_title, basket_type) VALUES '" +
  31. (:basket=>basket_id.to_s) +
  32. "', '" + params[:item_title] + "', 3)"
  33.  
  34. # Не знаю можно ли передать вместо query произвольные данные,
  35. # но если это так, то такой код небезопасен.
  36. results = ActiveRecord::Base.connection.execute(query)
  37.  
  38. # Логику проверки бесплатной доставки нужно вынести в отдельный метод модели.
  39. Basket.add_free_delivery(basket)
  40.  
  41. # Использование HTML в контроллере.
  42. return "<h1>Добавлен товар в корзину: #{@item.title}</h1>"
  43. end
  44. end
Add Comment
Please, Sign In to add comment