2010-07-11 10 views
2

Eh bien, je ne veux pas vraiment faire un calendrier, mais j'ai besoin d'une vue pour chaque jour de l'année qui, je suppose, est un peu la même chose. Dites que j'ai une vue où vous voyez par exemple "1er juillet" en haut de la page et vous avez des liens vers la veille et le lendemain. En dessous, il y a une liste de - dans mon exemple - des chambres et ils ont des états différents - disponibles ou réservés.Faire un calendrier avec Sinatra

Comment pourrais-je faire quelque chose comme ça en utilisant Sinatra et Datamapper? Est-ce que je le mets dans l'url ou quelles possibilités ai-je?

get '/rooms/:date' do 
    "List of rooms for " + params[:date] 
end 

Donc, pour récapituler. J'essaie de créer un calendrier où, pour chaque jour, vous obtenez une liste de quelque chose qui est disponible ou réservé pour chaque jour de l'année - mais je ne sais pas par où commencer.

Répondre

3

Je commencerais par la conception de base de données. Quelles sont vos tables centrales? Comment intègrent-ils les données temporelles? Disons que vous avez la liste des rooms. Ensuite, vous devrez avoir une autre table (disons room_reservations), chaque enregistrement ayant start_date, end_date et room_id. Une requête recherchant une liste de pièces occupées à une date donnée devrait être triviale.

En ce qui concerne la mise en œuvre vue centrée sur la date de Sinatra, il peut être aussi simple que:

require 'rubygems' 
require 'sinatra' 
require 'date' 
require 'haml' 

get '/' do 
    redirect "/rooms/#{Date.today}" 
end 

get '/rooms/:date' do |d| 
    @date = Date.parse d 
    haml :rooms 
end 

__END__ 

@@rooms 
%a{:href => "/rooms/#{@date - 1}"} 
    [email protected] 
%span 
    [email protected] 
%a{:href => "/rooms/#{@date + 1}"} 
    [email protected]+1 
+0

Si je devais modéliser un motel, il aurait un nom et de nombreux invités et de nombreuses sections. Chaque section (A, B, C etc.) a beaucoup de chambres (1, 2, 3, etc.) et je suppose que chaque chambre a une réservation et une réservation a un ou plusieurs invités. Pendant le séjour du client au motel, il devrait être possible pour le personnel de déplacer l'invité dans une autre pièce, donc je ne suis pas sûr que start_date et end_date sont la bonne façon d'y aller. – schwift

+1

Eh bien, tout dépend de la complexité de la construction de votre application, et si vous envisagez de démarrer un complexe immédiatement, ou de commencer simplement, et de le rendre complexe par rapport aux itérations (versions, etc.). En tout cas, ce que vous devez faire en premier est 1) concevoir votre base de données 2) concevoir votre flux de travail d'interface. Le codage Ruby et le routage Sinatra devraient arriver à la toute fin. –

+0

J'ai pensé à le rendre assez simple pour commencer. Ce pourrait être une table appelée pièces appartenant à une section. Les chambres peuvent bien sûr avoir plusieurs réservations mais seulement une pour une date donnée. Ou peut-être qu'il est préférable de lier les réservations à plusieurs pièces. Je suppose que chaque réservation aurait une date de début et une date de fin, mais je veux toujours être en mesure de lier une réservation à différentes pièces dans les jours entre la date de début et la date de fin. – schwift