我在Rails 3中有这样的搜索:
Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC')
字符串
但是我需要:date => p[:date]
条件等价于:date > p[:date]
。我怎么能做到这一点呢?谢谢你的阅读。
我在Rails 3中有这样的搜索:
Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC')
字符串
但是我需要:date => p[:date]
条件等价于:date > p[:date]
。我怎么能做到这一点呢?谢谢你的阅读。
6条答案
按热度按时间6xfqseft1#
字符串
或者你也可以把所有东西都转换成SQL表示法
型
laik7k3q2#
如果你遇到列名不明确的问题,你可以这样做:
字符串
gt0wga4j3#
您可以尝试用途:
字符串
在SQL中等价
型
其结果是:
型
我也变了
型
为
型
fjnneemd4#
如果你不喜欢传入字符串,我更喜欢@sesperanto的做法,除了让它更简洁,你可以在日期范围内删除
Float::INFINITY
,而只是使用created_at: p[:date]..
字符串
请注意,这会将查询更改为
>=
而不是>
。lc8prwob5#
更新
Rails核心团队决定暂时恢复这个更改,以便更详细地讨论它。请参阅此评论和this PR了解更多信息。
我留下我的答案只是为了教育目的。
Rails 6.1中用于比较的新“语法”(已恢复)
Rails 6.1为
where
条件中的比较运算符添加了新的“语法”,例如:字符串
因此,您的查询可以重写如下:
型
这里是a link to PR,你可以找到更多的例子。
lndjwyie6#
现在有一种更简洁的方法来实现这一点(在日期测试中使用无限范围)
字符串
注意-SQL日期比较将使用“>=",这并不完全是要求的。如果数据是date_time,它可能是好的。如果它是一个日期,
p_date
之后的一天可能更好。