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.

Reply via email to