2010-07-21 17 views
5

robię jakieś zwykłe zapytania SQL w moim modelu poręcze (dla purystów jest to tylko dla złożonych zapytania SQL :)Rails - uchodzące SQL params

Ponieważ nie używam metody find */stan, czy istnieje sposób, że pomocnik Czy mogę tego użyć bezpośrednio?

Odpowiedz

6

Metoda quote na obiekcie połączenia powoduje usunięcie ciągów. Podczas budowania zapytań należy użyć sanitize_sql_for_conditions, aby przekonwertować skróty lub tablice warunków ActiveRecord do klauzul WHERE SQL.

Metody dostępne pod ActiveRecord::ConnectionAdapters::DatabaseStatements są przydatne w przypadku zapytań bezpośrednich, w szczególności tych rozpoczynających się od select_.

+0

Tak w moim modelu robię connection.select_all (sql). Ale nie mogę znaleźć metody "quote" na obiekcie połączenia w rdoc dla ucieczki z moich parametrów wejściowych dla warunków. – kapso

+0

OK, mam to, dzięki! – kapso

+7

'sanitize_sql_for_conditions' wydaje się być przeniesiony do modułu i ustawiony na prywatny. – lulalala

0

Wewnętrznie używane szyny do obsługi obiektów zastępczych. Oczywiście ta metoda jest chroniona, więc nie możesz jej (czysto) używać poza modelem ActiveRecord. Możesz obejść ochronę używając send:

escaped_string = Model.send(:sanitize_sql_for_conditions, [ 
     'id = ? and name = ?', 
     params[:id], params[:name] 
    ] 
)