Class: C80Yax::Item

Inherits:
ActiveRecord::Base
  • Object
show all
Extended by:
FriendlyId
Includes:
Mixins::Item::Database::Props
Defined in:
app/models/c80_yax/item.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Mixins::Item::Database::Props

#common_props, #item_as_hash, #main_props, #prefix_props, #price_props

Class Method Details

.all_on_main_arObject

выдать все товары, которые надо показать на главной странице “строительные материалы” с помощью методов ActiveRecord



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'app/models/c80_yax/item.rb', line 74

def self.all_on_main_ar

  # * В первую очередь отображаются товары с пометкой "Выводится на главной"
  items_is_main = self.where('is_main = ?',1)

  # * Далее во вторую очередь выводятся товары, у которых есть обе отметки "hit" и "sale"
  items_is_hit_and_is_sale = self.where('is_hit = ? AND is_sale = ?',1,1)

  # * Далее выводятся товары, которые отмечены только "hit"
  items_is_hit = self.where('is_hit = ? AND is_sale = ?',1,0)

  # * Потом товары, которые отмечены только sale
  items_is_sale = self.where('is_sale = ? AND is_hit = ?',1,0)

  # * А далее все товары, которые по цене (по возрастанию) - от наиболее дешевого товара к наиболее дорогому.
  items_other = self.where.not('is_main = ?',1)
                    .where.not('is_hit = ? AND is_sale = ?',1,1)
                    .where.not('is_hit = ?',1)
                    .where.not('is_sale = ?',1)

  items_is_main.union(items_is_hit_and_is_sale)
      .union(items_is_hit)
      .union(items_is_sale)
      .union(items_other)

end

.all_on_subcat_ar(strsubcat_id) ⇒ Object

выдать все товары, которые надо показать на любой странице подкатегории (БЕЗ ФИЛЬТРОВ) с помощью методов ActiveRecord и c80_active_record_union



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'app/models/c80_yax/item.rb', line 103

def self.all_on_subcat_ar(strsubcat_id)

  # Сначала выводятся только те, товары, у которых есть обе отметки "hit" и "sale"
  items_is_hit_and_is_sale = self.where('is_hit = ? AND is_sale = ?',1,1)

  # * Далее выводятся товары, которые отмечены только "hit"
  items_is_hit = self.where('is_hit = ? AND is_sale = ?',1,0)

  # * Потом товары, которые отмечены только sale
  items_is_sale = self.where('is_sale = ? AND is_hit = ?',1,0)

  # * А далее все товары, которые по цене (по возрастанию) - от наиболее дешевого товара к наиболее дорогому.
  items_other = self.where.not('is_main = ?',1)
                    .where.not('is_hit = ? AND is_sale = ?',1,1)
                    .where.not('is_hit = ?',1)
                    .where.not('is_sale = ?',1)

  items_is_hit_and_is_sale.union(items_is_hit)
      .union(items_is_sale)
      .union(items_other)
      .where(:strsubcat_id => strsubcat_id)

end

сформировать и вернуть список “похожих товаров”



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'app/models/c80_yax/item.rb', line 130

def self.get_related_items_list(item_id)
  # Rails.logger.debug("<Item.get_related_items_list> [123] item_id = #{item_id}")
  # Он формируется по следующим правилам:
  # 1. Попадают товары из этой же подкатегории (обязательно, если в подкатегории один товар, то блока просто нет)
  # 2. Тот же бренд
  # 3. Наиболее близкая цена
  # 4. Если есть параметр "Размер", то наиболее близкие по размеру.
  # Также должа быть возможность ручного управления блоком "Похожие товары",
  # где администратор просто указывает ссылки на похожие товары.

  # результат
  all_related_items = []

  # кол-во элементов в результате не более этого значения
  n = 4

  item = self.find(item_id)

  if item.related_childs.count > 0
    item.related_childs.each do |itm|
      if all_related_items.count < n
        all_related_items << itm
      else
        break
      end
    end
  end

  all_related_items

end

Instance Method Details

#normalize_friendly_id(input) ⇒ Object



65
66
67
# File 'app/models/c80_yax/item.rb', line 65

def normalize_friendly_id(input)
  input.to_s.to_slug.normalize(transliterations: :russian).to_s
end

#slug_candidatesObject



61
62
63
# File 'app/models/c80_yax/item.rb', line 61

def slug_candidates
  [:title] + Array.new(6) {|index| [:title, index+2]}
end