So che boolean in Ruby sono classi. Ma dal punto di vista pratico, c'è un modo per ordinare un array per booleano (vale a dire, con tutti gli elementi con valore vero per primo)?sort_by con Boolean in Rails
Grazie.
So che boolean in Ruby sono classi. Ma dal punto di vista pratico, c'è un modo per ordinare un array per booleano (vale a dire, con tutti gli elementi con valore vero per primo)?sort_by con Boolean in Rails
Grazie.
Si potrebbe barare e farlo tornare un numero:
sort_by { |a| a.thing ? 0 : 1 }
Si potrebbe utilizzare partizioni e poi appiattire i risultati:
partition{|v| v == true}.flatten
Penso che questa risposta esprima l'intento di più .... –
Se vuoi essere dalla parte della sicurezza ed evitare modifiche involontarie, potresti voler usare 'flatten (1) '. Tuttavia, se si sa che gli elementi non possono essere appiattiti, il codice precedente va bene in quanto è più conciso. http://ruby-doc.org/core-2.3.0/Array.html#method-i-flatten –
Utilizzando ActiveRecord's order (incluso in Rails):
collection.order(thing: :desc)
La migliore risposta! Facciamo l'ordine sul lato SQL non nei record recuperati. – Roman
Poiché ci sono un paio di modi diversi rappresentati qui, sono andato avanti e li ho confrontati per vedere quale è più veloce, l'ordinamento 27.000 articoli basati su un attributo booleano:
Rehearsal ---------------------------------------------
sort_by 0.070000 0.000000 0.070000 ( 0.075203)
partition 0.110000 0.000000 0.110000 ( 0.114667)
order 0.000000 0.000000 0.000000 ( 0.000046)
------------------------------------ total: 0.180000sec
user system total real
sort_by 0.010000 0.000000 0.010000 ( 0.016611)
partition 0.110000 0.000000 0.110000 ( 0.111384)
order 0.000000 0.000000 0.000000 ( 0.000047)
Quindi sì, mantenere le cose sul lato SQL rende sicuramente le cose più velocemente.
questi hanno fatto il trucco ... grazie mille –