Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 以相反的顺序获得最后14天_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 以相反的顺序获得最后14天

Ruby on rails 以相反的顺序获得最后14天,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想在视图中打印过去14天的统计数据 most_recent = Date.current least_recent = Date.current.ago(14.days) 为此,我的目标是创建一系列日期,从今天开始,到第14天结束(回到时间),在视图中使用进行迭代 most_recent = Date.current least_recent = Date.current.ago(14.days) 这不起作用: most_recent..least_recent.each 这

我想在视图中打印过去14天的统计数据

most_recent   = Date.current
least_recent  = Date.current.ago(14.days)
为此,我的目标是创建一系列日期,从今天开始,到第14天结束(回到时间),在视图中使用
进行迭代

most_recent   = Date.current
least_recent  = Date.current.ago(14.days)
这不起作用:

most_recent..least_recent.each
这似乎不起作用:

(most_recent).downto(least_recent).each
有什么办法可以做到这一点吗?

试试这个:

14.times do |i|
  date = Date.today-i
  #do stuff with date
end
我会使用:

您的尝试不起作用,因为
最近的
大于
最近的
(我在这里使用整数,但日期也是如此):

这些方法只能“从低到高”工作:

这是怎么用的

输出:

2013-09-27
2013-09-26
2013-09-25
2013-09-24
2013-09-23
2013-09-22
还有,;使用-1进行步进可以追溯到时间

require 'date'
most_recent = Date.today
least_recent = most_recent - 14
most_recent.step(least_recent, -1){|d| puts d}
#=> 2013-09-27
#=> 2013-09-26
#=> 2013-09-25
#=> 2013-09-24
#=> 2013-09-23 
#=> ...

我过去没有使用过
days.ago
,因为我读到它有更高的服务器开销-或者这只是
time\u ago\u的情况(换句话说
?@Stefan这是Rails方法吗?:)@dax它没有任何开销
14.天
返回
1209600
(秒数)和
1209600.前
只返回
Time.current-1209600
@Stefan抱歉!我没有看到您提供的链接:)你必须
反转
数组:“从今天开始,到第14天结束”,这很好。。它起作用了。。没必要在那件事上做什么。。谢谢@Aruprakshit你也得到了我的一个同样的…:)享受红宝石@BachanSmruty也许你应该解释为什么它是这样工作的(
least\u-recent..most\u-recent
),而不是另一种(
most\u-recent..least\u-recent
)。小心使用
操作符。它很少被使用,因为它是不直观的,所以被很多人误解甚至不知道。再加上
reverse\u each
,你的代码就会变得更加晦涩难懂,这会导致在有人不得不维护它时引入bug。这就像一个带有双重否定的句子,它可以工作,但破译它会让我们的大脑旋转。Stefan的答案更优雅:-)
down(min){date}
相当于
step(min,-1){date}
),但我喜欢你的方法……)所以你有我的+1.
require 'date'

dt = Date.today
dt.downto(dt-5){|d| puts d }
2013-09-27
2013-09-26
2013-09-25
2013-09-24
2013-09-23
2013-09-22
((Date.today - 14)...(Date.today)).reverse_each do |d|
  # YOUR CODE GOES HERE.. puts d
end
require 'date'
most_recent = Date.today
least_recent = most_recent - 14
most_recent.step(least_recent, -1){|d| puts d}
#=> 2013-09-27
#=> 2013-09-26
#=> 2013-09-25
#=> 2013-09-24
#=> 2013-09-23 
#=> ...