Allow to use rails style on queries with specific order

I have a situation which I need use a specific order for queries which the attributes are an enum, something like this:
.order(“x.status = 5, x.status = 1, x.status = 6 …”), but it isn’t the best way for readability, and I haven’t found anything about how to do it on rails way.

Is a big deal create this functionality on rails? Something like:

.order(status: [:removed, :new, :active, :corrupted …])

If yes, it’s something trivial, if a haven’t contributed with rails, can I help to build that?

Are you using MySQL? It has a field function that solves this

You could probably do the same thing with substring index with other DBMSs.

I just meet the same problem like you

ORDER_PRIORITIES = [:removed, :new, :active, :corrupted]
def self.priorities_based_order
conditions = { |value, index| “WHEN #{value} THEN #{index} ELSE 999” }.join("\n") # I want other statuses to be sorted lastly, you can also use FIELD function in MySQL
order_by(“CASE #{table_name}.status #{conditions} END”)




The above codes not run yet but I think it must work.

在 2017年10月20日星期五 UTC+8上午1:30:35,Pablo Margreff写道:

Nop, I’m using postgres, but I already solved the problem, my point here is implement something on the rails way …

Hey, thanks for the answer. My final solution looks something like that, but How I said to Kevin, my point here is implement it on rails to allow use it on rails style.

The problem is use something like :removed, :new, etc isn’t allowed because rails always expect ASC or DESC for param for order, do u get my point? I haven’t any exp with rails core, but is that something that should be allowed if I open a PR? and that’s something for a first-time traveler implements?