2012-04-23 28 views
0

コロン「:」を含む値を持つモデルでSQLクエリを実行しようとしています。以下のようなRailsがSQLエスケープコロン文字で検索

何か:

Model.find_by_sql([SELECT * FROM table WHERE field1 = ? AND field2 ='some:value'], params) 

これは、次のエラーが発生します。

ActiveRecord::PreparedStatementInvalid

いずれも、適切にコロンをエスケープする方法を知っている「:」の値テキストに上記のフィールド2には?

答えて

1

gsub!(':','\\:\\')が有効です。

2

それはコードが短くなり、使用:

Model.where("field1 = ? AND field2 ='some:value']", params) 

具体例:

1.9.3-head :024 > Tag.where('created_at <= ? and name = "some:value"', Time.now) 
    Tag Load (1.6ms) SELECT "tags".* FROM "tags" WHERE (created_at <= '2012-04-23 18:06:54.967319' and name = "some:value") 
=> [#<Tag id: 2419, name: "some:value", created_at: "2012-04-23 18:06:35", updated_at: "2012-04-23 18:06:35">]