Сортировать атрибут модели Rails по методу - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть модель, которая использует метод для отображения атрибута в представлении.Мне удалось их отсортировать, но они сортируют не так, как мне нужно, чтобы они были отсортированы.

enter image description here

У меня есть красные величины вверху, которые я хочу, но мне нужно, чтобы зеленые и желтые величины поменялись местами.Порядок должен быть красным, желтым, а затем зеленым.

Вот метод, который добавляет цвета к столбцу:

def get_quantity_text_class
  case
  when quantity_on_hand > reorder_quantity then 'text-success'
  when quantity_on_hand > p_level then 'text-warning'
  else 'text-danger'
  end
end

А вот метод, который создает столбец:

def quantity_on_hand
  ppkb.sum(:quantity)
end

Вот алгоритм сортировки, который я использую:

sort_by{ |item| item.get_quantity_text_class }

Я чувствую, что я так близко, но я просто не могу понять, как поменять зеленые и желтые числа.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете определить свой компаратор внутри Item

class Item
  def <=>(another_item)
    txt_class   = self.get_quantity_text_class
    o_txt_class = another_item.get_quantity_text_class 

    if txt_class == o_txt_class
      # put your logic here for items with identical classes.
      # for example: 
      self.quantity_on_hand <=> another_item.quantity_on_hand
    end

    text_classes = ['text-danger', 'text-warning', 'text-success']

    txt_class_idx   = text_classes.find_index { |e| e == txt_class }
    o_txt_class_idx = text_classes.find_index { |e| e == o_txt_class }

    txt_class_idx <=> o_txt_class_idx
  end
end

, затем позвоните items.sort

0 голосов
/ 13 декабря 2018

В настоящее время сортируется на основе строковых значений text-danger, text-success и text-warning.Чтобы отсортировать его так, как вы хотите, попробуйте отсортировать его по числовым значениям:

sort_by do |item| 
  case item.get_quantity_text_class
     when 'text-danger'
       0
     when 'text-warning'
       1
     else
       2
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...