Идентификатор + имя Краткого заголовка в URL в направляющих (как в StackOverflow)

Я пытаюсь достигнуть 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 который работает отлично на меня, таким образом, я пойду с этим.

16
задан Sean Levin 27 April 2012 в 18:28
поделиться

2 ответа

Вы захотите добавить обычный маршрут с Route Globbing в дополнение к вашему ресурсному маршруту (при условии, конечно, что ваш постов маршруты определены). Например,

map.resources :posts
map.connect '/posts/:id/*slugs', :controller => 'posts', :action => 'show'
9
ответ дан 30 November 2019 в 15:40
поделиться

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
30
ответ дан 30 November 2019 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: