Я хочу добавить название статьи к ее URL-адресу аналогично URL-адресам SO. Мне предложили использовать следующую настройку в ответе на мой другой вопрос
# routes.rb
match '/articles/:id/:title' => 'articles#show', :as => :article_with_title
# articles/index.html.erb
link_to article.title, article_with_title_path(article, :title => article.title.downcase.gsub(/[^a-z0-9]+/,' ').strip.gsub(/\s+/,'-'))
Это работает, однако я нахожу это немного избыточным. Есть ли способ сделать это лучше? А как насчет дополнительного универсального метода для обработки нескольких маршрутов?
match '/articles/:id/:title' => 'articles#show'
match '/users/:id/:name' => 'users#show'
etc.
Примечания:
- В настоящее время хорошо работают следующие маршруты:
/article/:id/:action
, /article/:id/:title
с условием, что статья не может иметь заголовков edit, show, index, etc.
- Я считаю, что
friendly_id
здесь не требуется, поскольку маршруты содержат явно :id
.
- Как я вижу, SO использует разные маршруты для вопросов
/question/:id/:title
, /posts/:id/:action
и для пользователей /users/:id/:name
, /users/:action/:id