Advertisement
Guest User

Untitled

a guest
Oct 17th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.01 KB | None | 0 0
  1. class BasketController
  2.   #По правилам Сэнди Мэц лучше разбить этот метод на методы поменьше
  3.   def add_to_basket
  4.     #Лучше использовать Item.find_by(title: params[:item_title])
  5.     item = Item.find_by_title(params[:item_title])
  6.  
  7.     basket = $basket #Тут лучше использовать классовую переменную вместо глобальной, чтобы соблюдать инкапсуляцию.
  8.  
  9.     basket.add_item(item)
  10.  
  11.     if basket.count_items > 10
  12.       #После этой ошибки, судя по всему, нужно выйти из этого метода с ошибкой
  13.       basket.error_messages.add("Слишком много товаров в корзине")
  14.     end
  15.    
  16.     #этот код лучше перенести в модель, как метод, который возврщает итоговую стоимость
  17.     total = 0
  18.     basket.items.each do |basket_item|
  19.       total += basket_item.price
  20.     end
  21.  
  22.     session[:basket_total] = total
  23.     #Если переписать это через ActiveRecord, то будет понятнее, что делает этот код.
  24.     #Было бы лучше создать связь has_many между Basker и Item, чтобы можно было
  25.     #делать это через Active record.
  26.     query = "INSERT INTO basket_items (basket_id, item_title, basket_type) VALUES '" +
  27.             (:basket=>basket_id.to_s) + #место для потенциальной sql-инъекции
  28.             "', '" + params[:item_title] + "', 3)"
  29.     #Неиспользуемая переменная results
  30.     results = ActiveRecord::Base.connection.execute(query)
  31.  
  32.     Basket.add_free_delivery(basket)
  33.    
  34.     #Подобные сообщения лучше хранить во views и @item не был объявлен
  35.     return "<h1>Добавлен товар в корзину: #{@item.title}</h1>"
  36.  
  37.   end
  38. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement