如何使用.fetch获取数组中的所有元素?

时间:2018-07-03 01:21:40

标签: arrays ruby date

我是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

1 个答案:

答案 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