在Rails模型范围内强制执行特定顺序

时间:2018-12-14 12:21:07

标签: ruby-on-rails model

我的rails代码中有一个模型M。它具有一个字段F,该字段可以具有4个值DJMZ

如果我使用这样的范围,它将按字段F的字母顺序对数据进行排序:

default scope {order (F: :asc)}

我在这里有2个问题:

  1. 我不想按F上的字母顺序对数据进行排序。我希望以F的此特定顺序显示数据。我希望始终首先为字段M包含值F的记录,然后依次按值依次为值JDZ的记录。我该如何实现?

  2. 假设我想先显示具有J的记录,然后按字段F的字母顺序对其余记录进行排序,我该怎么做?

    < / li>

1 个答案:

答案 0 :(得分:2)

您可以使用CASE语句进行排序

order("CASE WHEN F = 'M' THEN 0 WHEN F = 'J' THEN 1 WHEN F = 'D' THEN 2 ELSE 3 END")

或者(如果只有“ M”需要在前,其余的可以是字母)

order("CASE WHEN F = 'M' THEN 0 ELSE 1 END, F")