2012-06-29 8 views
6

Angenommen, ich möchte ein Blog mit Rails 3 auf meiner Website haben und es wird das einzige sein, was ich darauf habe. Ich möchte Rails verwenden, um es zu implementieren, aber ich mag nicht die URLs, die Rails produziert. Ich möchte URLs wie folgt aus:Rails 3 URL ohne Controller Name

example.com/2012/05/10/foo

Ich will nicht so etwas wie das, was ich weiß, wie (mit to_param) zu tun:

example.com/entries/2012/05/10/foo

ich noch verwenden möchten die Helfer wie

new_entry_path(@entry) # -> example.com/new 
entry_path(@entry) # -> example.com/2012/05/10/foo 
edit_entry_path(@entry) # -> example.com/2012/05/10/foo/edit 
destroy_entry_path(@entry) 
form_for(@entry) 
link_to(@entry.title, @entry) 

und so weiter. Ich werde dann Kommentare und wollen sie zugänglich als ihre eigenen Ressourcen zu machen, wie

example.com/2012/05/10/foo/comments/5

und URLS sollte auch möglich sein, mit den normalen Helfer zu bekommen:

edit_entry_comment_path(@entry, @comment) # -> example.com/2012/05/10/foo/comments/5/edit 

oder etwas so wie das.

So ist es möglich, URLs ohne den Controller-Namen zu erhalten und immer noch die URL-Helper-Methoden zu verwenden? Beim Überschreiben von to_param wird immer nur der Teil nach dem Controller-Namen in der URL geändert. Es wäre sehr hilfreich, einen Beispielcode zu bekommen.

Antwort

13

Ihre routes.rb hat wahrscheinlich eine Zeile wie folgt aus:

resources :entries 

die /entries/2012/05/10/foo Routen der Form erzeugt.


Es existiert ein :path Argument, dass Sie etwas neben dem Standardnamen entries verwenden. Zum Beispiel:

resources :entries, :path => 'my-cool-path' 

werden Routen des Formulars /my-cool-path/2012/05/10/foo produzieren.


Aber wenn wir einen leeren String :path passieren , sehen wir das Verhalten Sie suchen:

resources :entries, :path => '' 

wird /2012/05/10/foo Routen Form herzustellen.

+2

Warum wurde dies abgelehnt? Es ist die richtige Antwort ... – jaredonline

+0

Ja, ich versuche das selbst auszuarbeiten - und nicht nur eins, sondern zwei! Vielleicht ist es ein Einwand gegen die scheinbare Skizzenhaftigkeit der Lösung (ich sehe Intuition diktieren, dass die Routen "// 2012/05/10/foo" mit einem extra vorangehenden Schrägstrich wären), aber es funktioniert definitiv und ist definitiv viel einfacher und mehr Rails-y, als alle findigen Routen manuell neu zu implementieren. – Matchu

+0

Ja. Es war bei -3, als ich hier ankam. Vielleicht, weil die von Ihnen angegebene Route nicht das Datum/Jahr/Monat/Datum enthält? – jaredonline