2011-01-08 19 views
1

Ich habe ein Modell namens appointment und ich möchte ändern, wie die "neue" Seite funktioniert. Wenn der Benutzer einen bestimmten Stunde Slot auf dem Kalender klickt, mag ich der Benutzer auf einer Seite mit einer URL wie folgt durchgeführt werden:Benutzerdefinierte Schienen Routen

appointment/new/hour/10 

Dies würde den Benutzer auf die „neue“ Seite und die Zeit für Der Termin würde um 10:00 Uhr vorbelegt sein.

Ich bin vertraut mit Symfony Routing, aber ich finde Rails Routing ein wenig verwirrend. Genauer gesagt weiß ich nicht, wie ich meinen Funktionsaufruf link_to so schreiben soll, dass er mir eine URL wie die obige gibt.

Ich habe ein paar FM-Aufnahmen gemacht, aber ich habe keinen Platz gefunden, der über die Art von Sache hinausgeht, die ich machen möchte. Wenn jemand erklären könnte, was ich tun soll, oder mich einfach auf die entsprechende Dokumentation verweisen, wäre das großartig.

Antwort

5

In Ihrem routes.rb Sie eine Route wie schaffen könnte:

# Rails 3 
match 'appointment/new/hour/:hour' => "appointments#new", :as => :new_appointment_with_time 

# Rails 2 
map.new_appointment_with_time 'appointment/new/hour/:hour', :controller => "appointments", :action => "new" 

Dann Sie es in Links verwenden:

link_to "10am", new_appointment_with_time_path(:hour => 10) 

Im Regler können Sie den Wert abrufen und Machen Sie Ihre neue Termininstanz verwenden Sie params[:hour]:

@appointment = Appointment.new(:hour => params[:hour]) 
+0

Vielen Dank für die gründliche Antwort! Das hat perfekt funktioniert. Interessanterweise ist die Zeit in der Drop-down-Liste meines Formulars eine bestimmte Anzahl von Stunden, aber ich nehme an, das ist ein separates Problem. –