クエリの記述方法にいくつかの問題があることに気づきましたが、それらを修正しても問題が解決するとは思いません。それでも、うまくいけば、このことを知っているとあなたはもっと近づくでしょう!
まず、Rubyに#{}補間を尊重させるには、二重引用符が必要です。
IRBを開いて、次のことを試してください。
1.9.3p194 :001 > 'COUNT(events.start_at > #{Time.now}) = 0'
出力されます:
"COUNT(events.start_at > \#{Time.now}) = 0"
一重引用符があるため、何も変更されていないことに注意してください。
次に、二重引用符で試してみましょう。もう少し詳しく説明します。
1.9.3p194 :002 > "COUNT(events.start_at > #{Time.now}) = 0"
今回は次のようになります。
"COUNT(events.start_at > 2012-09-24 14:47:52 -0700) = 0"
ただし、SQLは比較のためにタイムスタンプを引用符で囲む必要があるため、それでも機能しません。
これは、次のように手動で処理できます。
1.9.3p194 :003 > "COUNT(events.start_at > '#{Time.now}') = 0"
生成するもの:
"COUNT(events.start_at > '2012-09-24 14:49:31 -0700') = 0"
しかし、それはすべてのSQLで機能するとは限りません-Postgresがリテラルを一重引用符で囲む必要があることは知っていますが、MySQLは二重引用符を好むか、問題ではない可能性があります。
これを処理する最良の方法は、Railsにそれを理解させることです。それを行う方法は、?を使用することです。SQLクエリ文字列内の演算子:
where('COUNT(events.start_at > ?) = 0', Time.now)
そして、Railsが生成してSQLデータベースに送信する出力は、次のようになります。
"WHERE COUNT(events.start_at > '2012-09-24 14:49:31 -0700') = 0"
お役に立てば幸いです。