Eu tenho essa pesquisa no Rails 3:
Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC')
Mas preciso que a :date => p[:date]
condição seja equivalente a :date > p[:date]
. Como posso fazer isso? Obrigado pela leitura.
where()
. O usowhere()
escapa automaticamente da entrada.where()
escapa automaticamente a entrada quando é usada no formato mostrado acima com pontos de interrogação no lugar de variáveis, com elas listadas posteriormente na chamada de função. Não é seguro para usá-lo desta maneira:Note.where("date > #{p[:date]}")
where("user_id = ?",current_user.id)
é mais arriscado do quewhere(user_id: current_user.id)
nos casos em que você mescla modelos que possuem umuser_id
campo. Usando os meios de notação SQL matérias que você precisa incluir os esclarecimentos tabela si mesmo, por exemplo:where("notes.user_id = ?",current_user.id)
.Se você encontrar problemas em que os nomes das colunas sejam ambíguos, poderá:
fonte
Você pode tentar usar:
equivalente em sql
O resultado é:
E eu também mudei
Para
fonte
O Rails 6.1 adicionou uma nova 'sintaxe' para operadores de comparação em
where
condições, por exemplo:Portanto, sua consulta pode ser reescrita da seguinte maneira:
Aqui está um link para o PR, onde você pode encontrar mais exemplos.
fonte