Quero classificar por duas colunas, uma é DateTime ( updated_at
) e a outra é decimal (preço)
Gostaria de poder classificar primeiro por updated_at e, em seguida, se vários itens ocorrerem no mesmo dia, classificar por Preço.
ruby-on-rails
NullVoxPopuli
fonte
fonte
:order => ["DATE(#{table_name}.updated_at)", :price]
(Observe que:price
é um símbolo.)order
assim:Model.all(:order => "day asc, `order` asc")
No Rails 4, você pode fazer algo semelhante a:
foo
ebar
são colunas no banco de dados.fonte
vai fazer o truque.
Atualizar:
é o caminho a seguir do Rails 3. (Obrigado @cpursley )
fonte
Thing.all.order("updated_at DESC, price ASC")
Thing.order("LOWER(name), number")
.A interface de consulta do Active Record permite que você especifique quantos atributos desejar para ordenar sua consulta:
ou se você quiser ser mais específico (obrigado @ zw963 ):
Bônus: após a primeira consulta, você pode encadear outras consultas:
fonte
model
paramodels
para que uma pessoa soubesse que está plural. Apenas uma sugestão.:asc
vez deasc
:Model.order({price: :desc}, {date: :desc}, {price: :asc})
Na verdade, existem muitas maneiras de fazer isso usando o Active Record. Um que não foi mencionado acima seria (em vários formatos, todos válidos):
Talvez seja mais prolixo, mas pessoalmente acho mais fácil de gerenciar. O SQL é produzido em apenas uma etapa:
Assim, para a pergunta original:
Você não precisa declarar o tipo de dados, ActiveRecord faz isso sem problemas, e o mesmo acontece com o seu DB Engine
fonte
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
? A ordem das cláusulas de ordem no SQL é o oposto do que obtenho quando executo.to_sql
isso.fonte
Nada disso funcionou para mim! Depois de exatamente 2 dias procurando em cima e embaixo na internet, encontrei uma solução !!
digamos que você tenha muitas colunas na tabela de produtos, incluindo: special_price e msrp. Estas são as duas colunas com as quais estamos tentando classificar.
Ok, primeiro em seu modelo, adicione esta linha:
Em segundo lugar, no Controlador de Produto, adicione onde você precisa realizar a pesquisa:
fonte