Christian: RoR: URL-Design?

Beitrag lesen

Hallo,

ich bin eigentlich PHPler und wollte mir mal Ruby On Rails antun.

Nach einigen Spielereien mit dem Framework bin ich davon auch ziemlich begeistert. Eine Frage liegt mir aber auf der Zunge:

Überlicherweise werden URLs in RoR so abgebildet:

:controller/:action/:id

Das funktioniert mit "eindimensionalen" Daten recht gut, auch beim Scaffolding.

Nur, angenommen, ich möchte in RoR eine Termin-Verwaltung implementieren.

Dann hätte ich einen Meeting-Controller, den ich so ansteuern würde:

/meetings/new
/meetings/edit/42
usw.

Darüber hinaus möchte ich nun Kontakte pflegen.

/contacts/new
/contacts/edit/4711
usw.

Soweit so gut. Jetzt möchte ich einen Kontakt zu einem neuen Termin hinzufügen. Da beide an sich nicht so direkt verbandelt sind (ich könnte ja auch einenTermin einpflegen mit einer Person, die nicht im System verwaltet wird), böte sich hier an:

Erstellen eines Meetings mit einer Person:

/meetings/new/?contact_id=4711

In der Funktion "new" würden die Werte des Meeting-Anlegen-Formulars vorbelegt durch die Kontaktdaten des Kontaktes 4711.

Nun könnte es aber sein, dass ich unter "kontakte" nur Firmen verstehe. Jede Firma (FooBar GmbH) hat verschiedene Ansprechpartner (Herr Müller, Vertrieb).

Wenn ich jetzt einen Ansprechpartner zu einer Firma anlegen möchte, wäre hier eine direkte Relation gegeben (im Gegensatz zu Meetings<->Contacts).

Sinnvoll würde also etwas wie
/contacts/4711/people/new

erscheinen.

Natürlich funktioniert /contacts/new zum anlegen einer Firma weiterhin.

Meine Fragen hierzu:

Wie wird so etwas Controller-Seitig abgebildet?
Wie sähe der Contacts_controller für so etwas aus, wie die routes.rb?

Bei einer Anwendung im Internet, die auf RoR basiert, habe ich sogar etwas gesehen wie:

contacts/new
contacts/4711/edit
contacts/4711/people/new

Ist das alles noch im Rahmen des automatischen Standard-Verhalten von RoR oder wird so etwas über named-routes gehandelt?

Wenn ich von :controller/:action/:id auf :controller/:id/:action umgestellt habe, lautet der von RoR für die Aktion :contoller=>contacts,:action=>new generierte Link /contacts/new/new.. Im obigen Beispiel reicht aber /contacts/new, wohingehen /contacts/2411/edit weiterhin funktioniert. Wie wird das gemacht?

Für die Hilfe bedankt sich RoR-Neuling
Chris