Skip to content

Instantly share code, notes, and snippets.

@georgiybykov
Created December 25, 2017 22:32
Show Gist options
  • Save georgiybykov/a34ce2b9cf02d8dce1e1ba430a2d30d0 to your computer and use it in GitHub Desktop.
Save georgiybykov/a34ce2b9cf02d8dce1e1ba430a2d30d0 to your computer and use it in GitHub Desktop.
Test exercise
# BasketController < ApplicationController
# должен наследоваться от класса ApplicationController
# контроллер должен быть "тонким"
class BasketController
def add_to_basket
# лучше всего искать по id, так как в названиях возможны совпадения
# так же можно вынести в приватный метод find_by_id (=> Item.find(params[:id]))
item = Item.find_by_title(params[:item_title])
# присваивать глобальную переменную опасно, так как она может быть
# переопределена в любом месте программы и проблемно найти в каком
basket = $basket
basket.add_item(item)
# нужно создать отдельный метод в моделях для этого условия
# а так же можно использовать метод length вместо count_items
if basket.count_items > 10
basket.error_messages.add("Слишком много товаров в корзине")
end
# тоже в модели создать метод для подсчета товаров в корзине
# чтобы не засовывать этот код в контроллер
total = 0
basket.items.each do |basket_item|
total += basket_item.price
end
# сессия имеет ограниченный объем хранения информации, но для 10 товаров хватит
# возможно просто нужно присвоить сумму товаров в корзине переменной
session[:basket_total] = total
# это обращение к БД. понимаю это, но предложений не могу внести кроме того, что
# код очень длинный и плохочитаемый. возможно лучше было бы переностить через слэш (\)
# а не знак +
# => код ниже создаст подобную таблицу SQL:
# query = new Query()
# query.name = '"(:basket=>basket_id.to_s) + "', '" + params[:item_title]"'
# query.total = 3
# query.save()
#
query = "INSERT INTO basket_items (basket_id, item_title, basket_type) VALUES '" +
(:basket=>basket_id.to_s) +
"', '" + params[:item_title] + "', 3)"
results = ActiveRecord::Base.connection.execute(query)
# лучше вынести из контроллера в модель
Basket.add_free_delivery(basket)
# здесь нужно делать render шаблона из views вместо html кода
return "<h1>Добавлен товар в корзину: #{@item.title}</h1>"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment