2009-07-09 8 views
2

Ich kämpfe mit der Pluralisierung der RESTful Route Generation in Rails 2.3.2.Rails, RESTful Routing und Pluralization

Konkret habe ich eine Ressource namens sitestatus. Diese Ressource ist wirklich unzählbar (Hirsch ist Hirsch, nicht Hirsche). Wenn ich es in einem Intializer als unzählbar spezifiziere, bekomme ich einige Helfer, aber die sitestatuses_path ist nicht verfügbar (was sinnvoll wäre).

Also, in einer Geste zur Konformität, habe ich sitestatus zählbar erlaubt. So, nun pluralisiert Rails sitestatus zu sitestatuses (nicht zu schrecklich), aber es besteht auf auch singularizing es zu sitestatu (fehlt das 's', urkomisch und schrecklich zur gleichen Zeit).

So peitschte ich meinen größeren Hammer aus und fügte hinzu, diesen Code zu dem intializer:

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.plural "sitestatus", "sitestatuses" 
    inflect.singular "sitestatus", "sitestatus" 
end 

(Anmerkung: Ich habe versucht, irregular verwenden und es funktionierte nicht richtig)

Dadurch gibt mir die erwarteten Ergebnisse in der Konsole, wenn ich "sitestatus".pluralize, aber wenn ich mich

undefined local variable or method 'sitestatuses_path' 

erhalte einen Anruf zu sitestatuses_path meiner Meinung nach machen versuchen, Whe n Ich lade ActionController :: UrlHelper in die Konsole und rufe sitestatus_path(123). Ich bekomme sitestatus/123, wie ich es erwarten würde. Allerdings, wenn ich sitestatuses_path nenne ich

undefined method 'sitestatuses_path' for #<Object... 

Dieser Name ist der Name des Modells und die Steuerung erhalten und es ist wirklich der einzige logische Name für beide, wie es eine Linie mit dem Firmennamen für das Objekt perfekt.

Was fehlt mir?

+0

Werden "sitestatuses" in der Liste der Routen angezeigt, wenn Sie Rake-Routen betreiben? –

+0

Nein. Die Get-Route existiert als site_status_index, die Post-Route ist jedoch leer. –

+0

Nur eine Anmerkung, REST hat nichts mit URI-Namenskonventionen zu tun. – aehlke

Antwort

2

Okay, es stellt sich heraus, dass ich den Inflector nicht benutzen musste. Rails hat in Bezug auf das Wort sitestatus bereits das Richtige getan.

Es gab ein paar Probleme und ein paar Lösungen, die ich verwenden musste.

Problem 1: Ich verwendete map.resources :sitestatus, nicht map.resources :sitestatuses. Das "s" am Ende des Wortes ließ Rails denken, dass es bereits pluralisiert war, wie es sein sollte. Also die lustigen sitestatu_path Helfer.

Lösung: Pluralize: sitestatus zu: sitestatuses.

Dies erstellt zwei Probleme:

Problem A: Rails nun davon ausgegangen, dass der Controller den Namen "Sitestatuses", das es nicht ist. Lösung A: Verwenden Sie die :controller hash_hey, die vom Rails-Router bereitgestellt wird, um den Controller umzubenennen.

Problem B: Rails angenommen, dass der URL-Pfad, den ich wollte, sollte /sitestatuses sein, was es nicht sein sollte. Lösung B: Verwenden Sie den Hash-Schlüssel :as, um die generierte URL umzubenennen.

Jetzt funktioniert alles perfekt.

1

Sie können die Namen der benannten Routenmethoden für Ihre Routen und die URLs für den Zugriff darauf durch Aufrufen von rake routes ermitteln.