2012-06-29 2 views
6

Предположим, у меня есть блог с Rails 3 на моем веб-сайте, и это будет единственное, что у меня есть. Я хотел бы использовать Rails для его реализации, но мне не нравятся URL-адреса Rails. Я хотел бы URL, как это:Rails 3 URL без имени контроллера

example.com/2012/05/10/foo

Я не хочу что-то вроде того, что я знаю, как это сделать (с to_param):

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

Я все еще хочу, чтобы использовать помощники, как

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) 

и так далее. Я тогда есть комментарии и хочу, чтобы сделать их доступными в качестве своих собственных ресурсов тоже, как

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

и те URLs должны быть также можно получить с обычными помощниками:

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

или что-то как это.

Так можно получить URL-адреса без имени контроллера и все еще использовать методы помощника url? Просто переписывание to_param всегда будет просто изменять часть после имени контроллера в URL-адресе. Было бы очень полезно получить некоторый пример кода.

ответ

13

Ваш routes.rb, вероятно, имеет линии что-то вроде этого:

resources :entries 

, который производит маршруты формы /entries/2012/05/10/foo.


Там существует :path аргумент, что позволяет использовать что-то, кроме имени по умолчанию entries. Например:

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

будет производить маршруты вида /my-cool-path/2012/05/10/foo.


Но, если мы передать пустую строку :path, мы видим поведение, которое вы ищете:

resources :entries, :path => '' 

будет производить маршруты формы /2012/05/10/foo.

+2

Почему это проголосовали? Это правильный ответ ... – jaredonline

+0

Да, я пытаюсь это сделать сам, а не один, а два! Возможно, это возражение против кажущейся эскизности решения (я вижу, что интуиция диктует, что маршруты будут «// 2012/05/10/foo» с дополнительной предшествующей косой чертой), но она определенно работает и, безусловно, намного проще и больше Rails-y, чем повторное выполнение всех находчивых маршрутов вручную. – Matchu

+0

Yea. Это было в -3, когда я приехал сюда. Возможно, потому, что на указанном вами маршруте нет материала/год/месяц/дата? – jaredonline

Смежные вопросы