我有一个模型,该模型使用一种方法在视图上显示属性。我设法对它们进行了排序,但是它们没有按照我需要对其进行排序的方式进行排序。
我想在顶部显示红色数量,但是我需要将绿色和黄色数量反转。顺序应该是红色,黄色然后是绿色。
以下是为列添加颜色的方法:
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 }
我觉得我已经很近了,但我只是想不出如何反转绿色和黄色数字。
答案 0 :(得分:2)
当前基于字符串值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
答案 1 :(得分:0)
您可以在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