2008-10-02 23 views
11

Prämisse: Normalerweise während der Vorbereitung einer neuen Ruby on Rails App, ich Modelle und Beziehungen in Bezug auf Benutzer navigieren. Normalerweise treffe ich einen Ort, an dem ich mich fragen muss, ob ich über die übliche "Faustregel" des Nistens nicht mehr hinausgehen sollte. Manchmal habe ich das Bedürfnis zu verschachteln, anstatt eine andere Namespace-Route zu erstellen und die Arbeit zu duplizieren.
Hier ein Beispiel:
Nest oder Nest nicht?

Modelle: Benutzer, Unternehmen, Standort
Nutzer hat und gehört zu vielen Firmen (viele zu viele)
Nutzer hat und gehört zu viele Standorte (viele zu viele)
Gesellschaft hat, gehört zu viele Standorte (viele zu viele)

Routen:
1 Ebene Verschachtelung
Benutzer /: user_id/Unternehmen/- Liste alle zu einem Benutzer verbundenen Unternehmen
Benutzer /: user_id/Orte/- Liste alle zu einem benutzerbezogenen Standorten
mehr als 1 gestrichenen Verschachtelung
Benutzer /: user_id/companies /: company_id/locations/- listet alle Firmenstandorte eines Benutzers auf

Also, meine Frage ist, ob es angemessen ist, mehr als 1 Ebene tief in RoR zu nisten? Ja oder Nein? Und warum?

Antwort

7

Ich neige dazu, Jamis Bucks advice zu folgen und niste nie tiefer als eine Ebene.

Edit: Wenn Sie mehr als 1 Ebene Nest gehen ich die neuen shallow routes Features in Edge-Check-out würde

+0

Flache Routen FTW. Das ist fast sicher das, was du willst. LocastersController # index macht keinen Sinn als/locations, weil Sie nie/alle/die Standorte wollen.Aber Sie können alle Standorte unter/locations/ behalten, egal mit welchem ​​Typ sie verknüpft ist. – Otto

2
users/:user_id/companies/:company_id/locations/ 

Während technisch ist es in Ordnung, wären daher nicht die benannte Route Helfer

user_company_location_path(user_id, company_id, location_id) 

3 Parameter wie diese zu ärgern ist ärgerlich. Alles was nervig ist, ist wahrscheinlich eine rote Fahne.

+0

check out smart_url in Ressource_controller: smart_url (@user, @company, @location). Aber ja, zu tief zu nisten scheint falsch. – webmat

1

Während es in der Theorie gut klingt, ich habe mehr als eine Ebene gefunden nisten kann beginnen verwirrend zu bekommen - vor allem, wenn Sie den gleichen Namen Controller auf verschiedenen Ebenen haben (was durchaus üblich sein kann)

Eg

user/x/blog/y/profile/z, and 
    user/x/profile/a 

ich, dass ich oft in einem anderen Namespace bin zu arbeiten, was in ich denke, finde ich arbeite. Wenn sie ähnlich, aber andere Dinge, kann es ziemlich verwirrend =)

Mein Aktuelle App, ging ich letzte Woche und entfernt die meisten verschachtelte Routen. (natürlich, YMMV)