0

フォームから手動で SQL を構築できるようにする必要がある状況があります。私はこのようなものを持っています:

SomeModel.where("id in (#{custom_sql})")

custom_sql次のようなselectステートメントはどこにありますか:

SELECT u.id FROM some_model u WHERE country_iso = 'AU'

where 句に無効な SQL がある場合にスローされる StatementInvalid 例外をキャッチできるようにしたいのですが、その方法がわかりません。

begin
  SomeModel.where("id in (#{custom_sql})")  
rescue 
  puts "Error"
end

しかし、それはエラーなしで落ち続けます。しかし、rails c私が行うUser.where("id in (#{custom_sql})")と、正しくエラーになります。何か案は?

4

3 に答える 3

0

まず、これは最高のSQLインジェクションです。達成したいことは何でも再考する必要があります。

次に、User.whereリレーションを返します。関係は怠惰です。遅延ステートメントはまだ実行されていません。したがって、これを行っている場合User.where(...).allは役立ちます。

于 2013-06-04T01:07:20.707 に答える