-
-
Save bDrwx/2689444e65fd413c1c7154c3a47446b2 to your computer and use it in GitHub Desktop.
Тестовое задание №1
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
# В целом создание корзины магазина неплохо описано в Agile web development | |
# with Rails. Думаю что концепция CRUID для данного типа приложений выглядит | |
# более естественно. Так же хорошо вписывается в данную модель создание промежуточной | |
# сущности между item между корзиой и списком товаров. | |
# В цело данный метод слишком веоик, не интуитивен и смешивает в кучу все слои MVC. | |
class BasketController | |
def add_to_basket | |
# Предпочтительно оперировать понятием уникального идентификатора id | |
item = Item.find_by_title(params[:item_title]) | |
# Использование глобальной переменной не желательно | |
basket = $basket | |
basket.add_item(item) | |
# Данный метод не остановит выполнение метода add_to_basket | |
if basket.count_items > 10 | |
basket.error_messages.add("Слишком много товаров в корзине") | |
end | |
total = 0 | |
# Нужно вынести в отдельный метод total_price. Добавление товара в корзину не связанно с подсчетом стоимости. | |
# не учитывается возможность приобретения нескольких позиций одного типа | |
basket.items.each do |basket_item| | |
total += basket_item.price | |
end | |
session[:basket_total] = total | |
#Зачем использовать SQL напрямую и не вызывать методы ActiveRecord | |
#Это задача Модели | |
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) | |
# Почему не использовать шаблонную систему Rails | |
# Это задача View | |
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