1

開始時刻が「今」より前で終了時刻が「今」より後のすべてのアラートを返すクエリを作成したいのですが、日付ではなく、時刻のみを考慮します。

私はこれがうまくいくと思っていたでしょう

Alert.find(:all, :conditions => [" ? between ? AND ?", Time.now, :start, :end])

ただし、このクエリが時刻だけでなくカレンダーの日付にも関係しているためではありません。

「.to_s(:time)」を見つけましたが、それを追加するとエラーが発生します。

Alert.find(:all, :conditions => [" ? between ? AND ?", Time.now.to_s(:time), :start.to_s(:time), :end.to_s(:time)])

Alert.find(:all, :conditions => [" ? between ? AND ?", Time.now.to_s(:time), :start.to_s(:time), :end.to_s(:time)])
ArgumentError: wrong number of arguments(1 for 0)
        from (irb):48:in `to_s'
        from (irb):48
        from /home/chris/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
        from /home/chris/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
        from /home/chris/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands.rb:41:in `'
        from script/rails:6:in `require'
        from script/rails:6:in `'

開始時刻と終了時刻のカレンダーの日付に関係なく、アラートの開始時刻と終了時刻の間にあることに基づいて、現在アクティブになっているすべてのアラートを見つけるにはどうすればよいですか?現在、タイムゾーンについては考えていませんが、将来的には考えています。

4

1 に答える 1

1

この質問は、sqlite を使用している場合の ActiveRecord のバグを表しています。これに対する解決策は、mysql に切り替えることです。詳細はこちら: https://github.com/rails/rails/issues/6247#issuecomment-5679856

于 2012-05-14T10:21:32.823 に答える