Sanitizando queries com ActiveRecord
28/01/09
No artigo Executando SQL no Rails mostrei como trabalhar com SQL no ActiveRecord.
Para sanitizar parâmetros da query, utilizei o método quote. O grande problema de utilizar este método é que se você tiver uma quantidade muito grande de parâmetros vai ser, como diz o Lucas Húngaro, um trabalho de presidiário!
O ActiveRecord possui um método protegido chamado sanitize_sql_array, que permite trabalhar com todas as interpolações de valores. Para utilizá-lo mais facilmente, basta fazer um monkey patch na classe ActiveRecord::Base.
class ActiveRecord::Base
def self.sanitize_query(query, options)
sanitize_sql_array([query, options])
end
end
Agora, você pode utilizar queries desta maneira:
options = {:title => "Simples Idéias"}
sql = User.sanitize_query("select * from blogs where title = :title", options)
User.connection.execute(sql)
- Permalink
- Trackback
- Comentários (2)
- Ao som de: The Toy Dolls – Spiders in the Dressing Room
Textos escritos por
Comentários #
Nando, legal. Você conhece o ryanb-scope-builder? Depois vou fazer um post sobre ele. O mais legal é que ele interpola named_scopes em runtime de forma condicional. Ou seja, você pode usar um filtro de busca do nome do usuário se o usuário preencher o filtro do nome e caso deixe em branco, não fazer.
O que é mais legal é que ele é mais facilmente testável e não lida com sql direto. Dá uma olhada. Não serve para tudo, mas estou usando para fazer filtros de busca em um novo projeto e, por enquanto, estou bem satisfeito.
abraços,
otávio
Olá!
Vc sabe como posso chamar funções em oracle no ruby?
Por exemplo, eu tenho uma função de banco com esta chamada pelo pl/sql devel
begin
-- Call the function
:result := fnc_list_times(c_cur_ret => :c_cur_ret);
end;
ele me retorna um inteiro (result) e o c_cur_ret é um cursor ( dá pra dizer que é um array ) com os dados dos times.
Será que algúem pode me dar uma ajuda?
Valeu
Deixe um comentário