2010-10-25 13 views
1

Je crée une application très simple en temps partagé utilisant Sinatra et Datamapper. Chaque utilisateur dans l'application aura n réservations et pour le moment chaque réservation se déroule du lundi au dimanche et il ne peut y avoir qu'une seule réservation par semaine. Maintenant, j'ai besoin d'une vue avec une zone de texte (et une étiquette) pour chaque semaine de l'année où les utilisateurs vont mettre leur nom (par auto-complétion ou quelque chose) et ainsi créer une réservation pour cette semaine. Et si la semaine est réservé le nom sera bien sûr rempli dans la zone de texte (et désactivé)Looping à travers les semaines de l'année en Ruby (Sinatra)

Ce serait quelque chose comme

weeks.each do 
    find user that has reserved this week - and create a textbox 
end 

Donc, ma question que je suppose est aussi simple - comment faire boucle I à toutes les semaines d'un an à Ruby?

Ou serait-ce une meilleure solution de simplement boucler 52 fois et faire un tableau pour chaque utilisateur avec le nombre de semaines réservées dans lui?

+0

365/7.0 n'est pas 52 donc il est un peu plus compliqué que ça. – einarmagnus

+0

Ouais c'est un problème. Je ne sais pas vraiment comment travailler avec les dates dans Ruby (ou dans la programmation en général) donc je ne peux pas trouver comment trouver le nombre de semaines dans une année donnée. – schwift

Répondre

1
(1..52).each do |week| 
    # find user that has reserved this week - and create a textbox 
end 
+0

J'ai édité ma question avant que j'ai vu votre réponse :) C'est ainsi que je le fais. Mais ... comment puis-je trouver le numéro de la semaine pour les dates réservées - si je veux plus tard pouvoir réserver du lundi au jeudi seulement? – schwift

+0

Enregistrez le numéro de la semaine en tant que champ dans la réservation au lieu des plages de dates. – drummondj

+0

Donc, est-ce qu'il y a un moyen pour Ruby de calculer le nombre de semaines selon la norme ISO-8601? – schwift

2

Vous devez boucle à travers ceci:

(Date.beginning_of_year.cweek...Date.today.end_of_year.cweek).each do |week| 
    find user that has reserved this week - and create a textbox 
end 
0

Pour d'autres qui pourraient trouver cette vieille question, comme je l'ai fait ...

1 Janvier est parfois la semaine 53. 31 Décembre est parfois semaine 1. Si vous voulez boucler toutes les semaines de l'année, vous devez d'abord décider si vous voulez les premiers jours de janvier, même si cela pourrait être la semaine 53 de l'année précédente.

Pour obtenir le h Le plus grand nombre de semaines dans une année, vous pouvez toujours vérifier le 28 décembre (puisque les semaines ISO déclarent que la semaine 1 est la semaine avec le premier jeudi).

Si vous ne vous souciez pas les premiers jours de janvier (peut-être ven-dim), vous pourriez faire quelque chose comme: Je pense que

require 'date' # Already included in sinatra though 

(1..Date.parse("#{year}-12-28").cweek).each do |week| 
    puts week 
end