Я пытаюсь достигнуть URL как это в направляющих:
http://localhost/posts/1234/post-slug-name
и с идентификатором и с кратким заголовком называют вместо также
http://localhost/posts/1234
или
http://localhost/posts/post-slug-name
(прямо сейчас у меня есть просто имя краткого заголовка в URL, таким образом, эта часть закончена). Как я могу сделать это?
UPD
Я нашел статью об этом: http://augustl.com/blog/2009/styling_rails_urls/, вместо /id/slug
это предлагает использовать /id-slug
который работает отлично на меня, таким образом, я пойду с этим.
Вы захотите добавить обычный маршрут с Route Globbing в дополнение к вашему ресурсному маршруту (при условии, конечно, что ваш постов
маршруты определены). Например,
map.resources :posts
map.connect '/posts/:id/*slugs', :controller => 'posts', :action => 'show'
Rails имеет некоторую встроенную поддержку SEO-дружественных URL-адресов.
Вы можете создать URL-адрес в форме: "id-title", просто переопределив метод to_param в вашей модели.
Это из одного из моих проектов, он создает URL-адрес с идентификатором, названием категории и именем модели:
def to_param
"#{id}-#{category.name.parameterize}-#{name.parameterize}"
end
Rails достаточно умен, чтобы извлечь его обратно в простой идентификатор, когда вы обращаетесь к действию вашего контроллера, поэтому следующее просто работает:
def show
@model = Model.find(params[:id])
render :action => "show"
end