我尝试了以下内容:
def next_seven_days
today = Date.today
(today .. today + 7).each { |date| puts date }
end
但这只是给了我第一个和最后一个日期。我无法弄清楚如何在两者之间获得所有这些。
答案 0 :(得分:10)
我想你想要更像这样的东西:
def next_seven_days
today = Date.today
(today .. today + 7).inject { |init, date| "#{init} #{date}" }
end
在这种情况下,返回值是一个包含所有日期的连接字符串。
或者,如果它不是您想要的连接字符串,您可以更改它的"#{init} #{date}"
部分。
作为旁注,在轨道上的ruby中使用puts
将不会打印到网页。使用<%= next_seven_days %>
时,该函数的返回值将打印到页面。 each
函数返回括号中的范围。
答案 1 :(得分:3)
您的代码肯定会打印到stdout的所有八天。您的问题是,您正在查看返回值(自each
返回后self
将(today .. today + 7)
)。
请注意,如果在erb模板中打印到stdout,则不会导致输出显示在渲染模板中。
答案 2 :(得分:2)
您的函数返回2011-07-07..2011-07-14指定的枚举,该枚举显示在您的视图中,但您的put将打印到STDOUT,这不是您的视图,但控制台屏幕是您的服务器正在运行=)
如果您希望视图显示七天的列表,您需要实际创建执行该操作的字符串并返回:)
def next_seven_days
outputstr = ""
today = Date.today
(today..(today+7.days)).each { |date| outputstr += date.to_s }
return outputstr
end
答案 3 :(得分:1)
def next_seven_days
today = Date.today
(today..(today+7.days)).each { |date| puts date }
end
答案 4 :(得分:0)
使用“下一步”方法
def next_seven_days
today= Date.today
7.times do
puts today
today=today.next
end
end