Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Именование класса не соответствует соглашениям принятым в Rails а так же класс BasketController
- # не наследуется от базового класса всех контроллеров ApplicationController.
- class BasketController
- # Поиск продуктов осуществляется по имени а не по уникальному для каждого продукта id.
- def add_to_basket
- item = Item.find_by_title(params[:item_title])
- # Если существует возможность обойтись без глобальных переменных, то необходимо этой возможностью воспользоваться.
- # Для сохранения значения переменной лучше использовать cookies или session.
- basket = $basket
- basket.add_item(item)
- # Для подсчета количества позиций в корзине лучше использовать валидацию в модели.
- if basket.count_items > 10
- basket.error_messages.add("Слишком много товаров в корзине")
- end
- total = 0
- # Логику подсчета суммы вынести в отдельный метод модели.
- basket.items.each do |basket_item|
- total += basket_item.price
- end
- session[:basket_total] = total
- # За создание записей в базе данных должна отвечать модель. Для этого есть ActiveRecord.
- query = "INSERT INTO basket_items (basket_id, item_title, basket_type) VALUES '" +
- (:basket=>basket_id.to_s) +
- "', '" + params[:item_title] + "', 3)"
- # Не знаю можно ли передать вместо query произвольные данные,
- # но если это так, то такой код небезопасен.
- results = ActiveRecord::Base.connection.execute(query)
- # Логику проверки бесплатной доставки нужно вынести в отдельный метод модели.
- Basket.add_free_delivery(basket)
- # Использование HTML в контроллере.
- return "<h1>Добавлен товар в корзину: #{@item.title}</h1>"
- end
- end
Add Comment
Please, Sign In to add comment