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.