2010-07-21 17 views
5

sto facendo alcune semplici SQLs nel mio modello rotaie (per i puristi questo è solo per SQLs complessi :)Rails - che fuoriescono SQL params

Dal momento che non sto usando metodi find */condizione, c'è un metodo di supporto che Posso usare direttamente per farlo?

risposta

6

Il metodo quote sull'oggetto di connessione esegue il escape delle stringhe. Quando si creano query, utilizzare sanitize_sql_for_conditions per convertire gli hash o gli array delle condizioni di ActiveRecord alle clausole SQL WHERE.

I metodi in ActiveRecord::ConnectionAdapters::DatabaseStatements sono utili per le query dirette, in particolare quelle che iniziano con select_.

+0

sì nel mio modello sto facendo connection.select_all (sql). Ma non riesco a trovare il metodo "quote" sull'oggetto di connessione in rdoc per sfuggire ai parametri di input per le condizioni. – kapso

+0

Ok, ho capito, grazie! – kapso

+7

'sanitize_sql_for_conditions' sembra essere stato spostato su un modulo e impostato su privato. – lulalala

0

Rails utilizza sanitize_sql_for_conditions internamente per gestire i segnaposto. Ovviamente, quel metodo è protetto in modo che tu non possa (chiaramente) usarlo al di fuori di un modello di ActiveRecord. È possibile aggirare la protezione utilizzando send:

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