我是Ruby和Ruby on Rails的新手,并且我将数据存储在Date类型的数组中。我正在尝试与数组中的每个日期进行日期比较,因此我使用.fetch
来检索其中一个日期,并使用Date.today
对其进行了测试,并且可以正常工作。但是有没有一种方法可以对数组中的每个日期进行获取?
例如:
act = [Tue, 30 Oct 2018, Tue, 30 Oct 2018, Tue, 30 Oct 2018, Tue, 30 Oct 2018, Tue, 30 Oct 2018, Tue, 30 Oct 2018, Tue, 30 Oct 2018, Sun, 01 Jul 2018]
act.fetch(0)
是Tue, 30 Oct 2018
,这是Date数据类型。
此外,如果我不调用fetch并尝试执行block语句来进行迭代,则会收到一条错误消息,指出:
没有将日期隐式转换为数组
编辑1:当我尝试使用Array#each这样迭代时:
2.4.0 :001 > cted = Activity.pluck(:start_date).each do |acts|
2.4.0 :002 > if Date.today >= acts
2.4.0 :003?> Date.today
2.4.0 :004?> elsif acts > Date.today
2.4.0 :005?> acts
2.4.0 :006?> end
2.4.0 :007?> end
(1.0ms) SELECT "activities"."start_date" FROM "activities"
=> [Sun, 17 Jun 2018, Sun, 17 Jun 2018, Sun, 17 Jun 2018, Sun, 17 Jun 2018, Sun, 17 Jun 2018, Sun, 17 Jun 2018, Sun, 15 Apr 2018, Tue, 26 Jun 2018]
当我尝试使用它时,它返回数组。
def closer_to_end_date
Activity.pluck(:start_date).each do |acts|
if Date.today >= acts
Date.today
elsif acts > Date.today
acts
end
end
end
答案 0 :(得分:2)
closer_to_end_date
返回一个Enumerator,因为数组中each
的调用返回了该值,因此实际上在日期和数组对象中应用了减法endz - closer_to_end_date
。 / p>
如果您想在每次比较后将值存储在closer_to_end_date
中,则可以尝试使用map
,它将存储您在迭代中返回的每个值,从而产生一个新数组。
尝试对代码进行一些调整,例如:
def closer_to_end_date
Activity.pluck(:start_date).map do |acts|
if Date.today >= acts
Date.today.to_date
elsif acts > Date.today
acts
end
end
end