二重引用符で囲まれた 3 つの補間値を含む複雑な結合条件があります (SQL インジェクション攻撃を回避するための AR の引用の一部として)。
:sanitize_sql
またはプレースホルダー:sanitize_sql_array
を使用できるという他の質問を用意しましたが、残念ながら?
、それらは で定義されていないようですactiverecord-sqlserver-adapter
。
それで、私の質問は、ActiveRecord を介して SQL サーバーでこれを機能させるにはどうすればよいですか??
def self.with_active_deal_counts
joins(<<-SQL.squish
LEFT OUTER JOIN (
SELECT [b].[merchant_id], COUNT(*) deal_count
FROM [tbl_deal] b
WHERE deal_active = 1
AND deal_archive = 2
AND ( deal_end = '1900-01-01'
OR deal_end > '#{Time.now + Time.now.utc_offset - 1.day}')
AND deal_start <= '#{Time.now + Time.now.utc_offset}'
GROUP BY [b].[merchant_id]
) a ON a.[merchant_id] = [tbl_merchant].[merchant_id]
SQL
).select("tbl_merchant.*, a.deal_count")
end
これにより、
EXEC sp_executesql N'SELECT tbl_merchant.*, a.deal_count FROM [tbl_merchant] LEFT OUTER JOIN (
SELECT [b].[merchant_id], COUNT(*) deal_count
FROM [tbl_deal] b
WHERE deal_active = 1
AND deal_archive = 2
AND ( deal_end = ''1900-01-01''
OR deal_end > ''2013-09-30 07:07:20 -0700'')
AND deal_start <= ''2013-10-01 07:07:20 -0700''
GROUP BY [b].[merchant_id]
) a ON a.[merchant_id] = [tbl_merchant].[merchant_id]'
...二重引用符で囲まれた値のために機能しません。''2013-09-30 07:07:20 -0700''
具体的には、Incorrect syntax near '1900'
(SQL Management Studio でクエリを実行すると、.