-
-
Save Hunk13/133118e939d7a9d9f523121e1690ba44 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| # вроде должен наследовать от ApplicationController и название во множественном числе | |
| # class BasketsController < ApplicationController | |
| class BasketController | |
| # метод очень большой, можно разложить частьи в модель, в приватные методы или совсем убрать | |
| def add_to_basket | |
| # Можно сделать приватный фильтр и поместить в before_action | |
| # скорее всего поиск по параметру будет использоваться не только в этом методе | |
| # еще параметром идет название и если в базе будет несколько одинаковых, | |
| # то в item будет массив. Поэтому можно добавить к выборке .limit(1) или .first | |
| # чтобы отобралось только одно значение | |
| # а вообще лучше искать по :id, тогда не нужно никаких дополнительных обрезок | |
| # саму переменную сделать переменной объекта @item | |
| item = Item.find_by_title(params[:item_title]) | |
| # вообще использовать глобальные переменные не самый хороший стиль | |
| # она может быть перезаписана из любого места программы и потом | |
| # сложно отлавливать баги | |
| # Можно передавать эту переменную в метод параметром add_to_basket(basket) | |
| # @basket = basket | |
| basket = $basket | |
| # @basket.add_item(@item) и так далее, с @ | |
| 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 | |
| # в сессии лучше хранить не общую сумму, а :id корзины | |
| session[:basket_total] = total | |
| # М-м-м, это не очень хорошо. Есть же ActiveRecord, можно с помощью его все сделать | |
| # переметры запроса передавать через strong parameters, чтобы обрезать допустимые параметры | |
| 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) | |
| # Нужно использовать вьюхи и шаблоны, так не очень хорошо. | |
| 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