2017-10-17 5 views
0

Je souhaite obtenir un tableau de dates fixe dans une plage de dates pour les articles comportant de nombreuses réservations. Une réservation a :start_date et :end_date.Ruby on Rails: Créer un tableau de dates à l'aide des plages de dates de début et de fin

exemple, l'article a ces réservations:

Booking A: 10/1/17 to 10/3/17 
Booking B: 11/2/17 to 11/4/17 

J'ai essayé d'utiliser plumer. Item.bookings.pluck[:start_date, :end_date] et il me donne un tableau qui ressemble à ceci [["10,01,17", "10,03,17"], ["11,02,17" , "11,04,17" ]]

Ce que je besoin est un tableau plat avec les plages de dates comme celui-ci ["10,01,17", "10/02/17", "10,03,17", "11,02,17" , "11,03,17", "11/04/17"]

+0

vous devez avoir les dates entre date X et date Y dans votre tableau? –

+0

(Date.today..Date.today + 10.days) .to_a – eezee

+0

Dans mon contrôleur, je voudrais écrire une requête et passer à une variable d'instance. Je peux interroger Item.bookings.pluck (: start_date,: end_date) et cela me donnerait un tableau de dates de début et de fin. Je dois d'abord obtenir les plages, y compris la date de début et de fin pour chaque tableau, puis aplatir le tableau de sorte que toutes les dates sont juste dans un tableau, comme illustré dans l'exemple. Je vous remercie! –

Répondre

1

Eh bien, afin d'obtenir des plages, vous avez besoin d'objets réels de date. Pour les sortir de chaînes comme la vôtre, vous devrez utiliser Date.strptime. Ensuite, vous pouvez construire des champs de tir des paires de date, puis reconvertir en cordes avec Date#strftime:

require 'date' 
format = '%m/%d/%y' # mm/dd/yy; adjust as needed 
dates = Item.bookings.pluck(%i<start_date end_date>).map do |bounds| 
    Range.new(*bounds.map { |d| Date.strptime(d, format) }).map do |d| 
    d.strftime(format) 
    end 
end.flatten 

qui, avec votre exemple ensemble de données me donne ceci:

["10/01/17", "10/02/17", "10/03/17", "11/02/17", "11/03/17", "11/04/17"] 
+0

Merci pour la réponse. Je reçois une erreur qui se lit comme suit: Type d'argument non pris en charge: Symbol. Construire un noeud Arel à la place. –

+0

Cela ressemble à «pluck» n'aime pas le tableau de symboles en tant qu'argument? Je pensais que c'était ce que vous étiez en train d'envoyer dans votre code original. L'appel 'pluck' devrait ressembler à tout ce qui a fonctionné pour vous; rien de tout cela n'a quelque chose à voir avec ma solution. Aucun des autres ne touche à des trucs de Rails; c'est juste du pur Ruby. –