Как я могу получить все элементы в массиве, используя .fetch? - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в 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, каждый из которых выглядит следующим образом:

     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 голосов
/ 03 июля 2018

closer_to_end_date возвращает Enumerator, потому что это то, что возвращает вызов each в массиве, поэтому фактически вычитание endz - closer_to_end_date применяется к дате и объекту массива.

Если вы хотите сохранить значение после каждого сравнения в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...