ruby/rails中的日期范围查询

Tru*_*ran 6 ruby ruby-on-rails date range

我正在尝试运行以下查询.我知道语法错误,但我无法弄清楚它有什么问题.基本上,我试图找到有多少游戏的日期在45天之内.我有一个名为Game的模型,它有一个名为date_of_game的字段属性.我的查询:

Game.where(date_of_game: <= (Time.now + 45.days)).count
Run Code Online (Sandbox Code Playgroud)

谢谢!!

MrY*_*iji 11

你说:

有多少游戏的日期在45天之内

但是你的代码将检索日期少于今天+ 45天的所有游戏,这意味着它将返回去年的游戏.要遵循您的陈述,您应该使用:

Game.where(date_of_game: Date.current..(Date.current + 45.days))
Run Code Online (Sandbox Code Playgroud)

此代码将返回在接下来的45天内发布的所有游戏.


什么是..

它是创建Ranges的运营商.试试你的控制台:

> (1..5).each do |some_number|
>   puts some_number
> end
1
2
3                                                                                                                                                                                                                                                                              
4                                                                                                                                                                                                                                                                              
5                                                                                                                                                                                                                                                                              
 => 1..5   
Run Code Online (Sandbox Code Playgroud)

它也适用于日期:

> (Date.today..(Date.today+5.days)).each do |some_date|
>   puts some_date                                                                                                                                                                                                                                            
> end                                                                                                                                                                                                                                                         
2014-06-04
2014-06-05
2014-06-06
2014-06-07
2014-06-08
2014-06-09
 => Wed, 04 Jun 2014..Mon, 09 Jun 2014 
Run Code Online (Sandbox Code Playgroud)

  • @user1547174 这是一个范围运算符:`1..5` 将生成 1 到 5 之间的范围。它也适用于日期。下面的`Date.current..(Date.current + 45.days)` 创建了一个从今天到未来 45 天的范围。将它传递给 ActiveRecord where 子句告诉 Rails 将此范围转换为正确的 SQL 查询,在您的情况下:`WHERE date_of_game BETWEEN '2014-06-04' AND '2014-07-19'` (2认同)

j-d*_*exx 5

您不能使用这样的哈希,而是使用字符串

Game.where("date_of_game <= ? ", (Time.now + 45.days)).count
Run Code Online (Sandbox Code Playgroud)