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? On Friday, October 20, 2017 at 2:47:41 AM UTC-2, Martin Hong wrote: > > I just meet the same problem like you > > ORDER_PRIORITIES = [:removed, :new, :active, :corrupted] > def self.priorities_based_order > conditions = ORDER_PRIORITIES.each_with_index.map { |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") > end > > # usage: > user.orders.priorities_based_order > The above codes not run yet but I think it must work. > > > 在 2017年10月20日星期五 UTC+8上午1:30:35,Pablo Margreff写道: >> >> 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? * >> >> >> >> >> -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at https://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.