2010-02-15 5 views
6

Я создаю в настоящее время одно приложение Rails, и я хотел бы придерживаться всех этих причудливых вещей, таких как REST и Resources, но я хотел бы немного настроить мои маршруты. Я хочу, чтобы мой маршрут GET был немного более подробным - приложение, которое я создаю, представляет собой простой блог, поэтому вместо GET /posts/1 я бы предпочел что-то вроде GET /posts/1-my-first-post.Rails routing - настраиваемые маршруты для ресурсов

Любые идеи, как это сделать? Не нашел ничего в Интернете.

ответ

4

Определите метод to_param в вашей модели, и все URL помощники будут Youse, что вы вернетесь с этим методом, например:

class Post < ActiveRecord::Base 
    der to_param 
    slug 
    end 
end 

Вам также необходимо адаптировать контроллеры для что. Заменить:

Post.find(params[:id]) 

с:

Post.find_by_slug(params[:id]) 

отметить также, что метод находки поднимает ActiveRecord :: RecordNotFound исключения, когда запись не может быть найдена при использовании find_by_ * метода исключения не будет поднято так вам нужно проверить это вручную.

0

В качестве альтернативы ...

Добавить метод, как это application_helper.rb

def permalink(post) 
    "#{post_path(post)}-#{post.slug}" 
end 

Затем используйте следующие в ваших взглядах (используя permalink(@post) вместо post_path)

<%= link_to @post.title, permalink(@post) %> 
0

Альтернативно .. .

Добавить способ, как это post.rb

def path 
    "/posts/#{id}-#{slug}" 
end 

Затем используйте следующие в ваших просмотров:

2

Вы можете найти friendly_id плагин полезным, как он будет также обрабатывать редиректы, если переименовать слизней (таким образом, поисковая оптимизация дружественных), обрабатывает конфликты имен и плавно интегрируется с методом find, поэтому вам не нужно прикасаться к вашим методам контроллера (за исключением перенаправления).

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