如何通过各自在Ruby中某一周的日子我循环?

我现在用的是下面的定义周一至周五:

@monday = Date.today.at_beginning_of_week @friday = 5.days.since(@monday)

但我确实需要,对于任何给定的一天,遍历星期一,星期二,星期三和采取的日期,并把输出入列。

<th>Monday</th> <th>Tuesday</th> etcetera

一个给定的行,例如,将是:

<tr><td>method_with_arg(monday)</td><td>method_with_arg(tuesday)</td><td>method_with_arg(wednesday)</td></tr>

这是值是一个方法,它的args日期。

什么是做到这一点最彻底的方法?

谢谢。

--------------解决方案-------------

def dates_week(d)
(d.beginning_of_week...d.beginning_of_week+5).map{|a|
"<td>#{a.strftime('%F')}</td>"
}.join
end

dates_week Date.today
#=> "<td>2010-05-17</td><td>2010-05-18</td><td>2010-05-19</td><td>2010-05-20</td><td>2010-05-21</td>"

而不是a.strftime你可以调用任何其他方法接收数据并返回字符串,如mails_sent_on(a)等等。 您还可以使用yield a有传你的日期相关的逻辑使用块:

def dates_week(d)
(d.beginning_of_week...d.beginning_of_week+5).map{|a|
yield a
}.join
end

dates_week(Date.today) { |d|
"<td>#{mails_sent_on(d)}</td>"
}

或者,保持串出dates_week方法:

def dates_week(d)
(d.beginning_of_week...d.beginning_of_week+5).map{|a|
yield a
}
end

dates_week(Date.today) { |d|
mails_sent_on(d)
}.join(', ')

或任何形式的需要。

我只是用普通的旧式Ruby对象,但我认为,如果你想使事情干,你会想周日的逻辑中分离出来,从您所使用的平日。

def dates_week(d)
d.beginning_of_week...(d.beginning_of_week+5)
end

dates_week(Date.today).map {|a|
"<td>#{a.strftime('%F')}</td>"
}.join

我会去,甚至一步比安德鲁和有它采取了块:

def dates_week(d, delim)
"<tr>" + (d.beginning_of_week...(d.beginning_of_week+5)).map do |day|
"<#{delim}> #{yield(day)} </#{delim}>"
end.join + "</tr>"
end

dates_week(Date.today, "th") {|d| d.strftime("%A")} # => <tr><th>Monday</th><th>Tuesday</th>...
dates_week(Date.today, "td") {|d| some_function(d)} #first row

我能想到的最简单的解决办法是:

monday = Date.today.at_beginning_of_week
days = []
7.times do |x|
days << x.days.since(@monday)
end

days.each do |day|
puts "<td>" + func(day) + "</td>"
end

这应该做的伎俩

分类:红宝石 时间:2015-03-15 人气:4
本文关键词: 红宝石,循环,日期
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.205 (s). 10 q(s)