Created
December 25, 2017 22:32
-
-
Save georgiybykov/a34ce2b9cf02d8dce1e1ba430a2d30d0 to your computer and use it in GitHub Desktop.
Test exercise
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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