我在Rails 3中搜索了这个:
Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC')
Run Code Online (Sandbox Code Playgroud)
但我需要:date => p[:date]条件是等同的:date > p[:date].我怎样才能做到这一点?谢谢阅读.
Rails的where方法可以在哈希中使用一个范围来生成一个查询,该查询将搜索该范围内的值.例如:
User.where(cash_money: 10..1000)
#=> SELECT `users`.* FROM `users` WHERE (`users`.`cash_money` BETWEEN 10 AND 1000)
Run Code Online (Sandbox Code Playgroud)
这也可以用于时间戳
User.where(last_deposit: 10.days.ago..1000.days.ago)
#=> SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` BETWEEN '2014-05-19 14:42:36' AND '2011-09-02 14:42:36')
Run Code Online (Sandbox Code Playgroud)
我发现你可以使用像这样的哈希语法做一个小于或大于数字的简单
User.where(cash_money: 10..Float::INFINITY)
#=> SELECT `users`.* FROM `users` WHERE (`users`.`cash_money` >= 10)
Run Code Online (Sandbox Code Playgroud)
同样可以-Float::INFINITY用于少于查询.
有没有办法用时间戳来做到这一点所以我可以得到如下的查询?
SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2014-05-19 14:42:36')
Run Code Online (Sandbox Code Playgroud)
我不能使用Float::INFINITY或Date::Infinity使用范围,因为他们都错误ArgumentError: bad value for range.
User.where('`users`.`last_deposit` >= ?', 10.days.ago)
Run Code Online (Sandbox Code Playgroud)
将生成相同的SQL,但如果这可以使用字符串以外的对象完成,我想这样做.
这有点糟糕但可以使用Time.at(0)和使用范围来完成 …