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.

Reply via email to