Rails url нуждающихся в постах /: id / the-name-of-post - PullRequest
2 голосов
/ 03 апреля 2011

Мне бы хотелось, чтобы URL-адрес моих рельсов выглядел следующим образом:

/posts/345/the-great-concept

, когда я использую в своей модели сообщений следующее,и функционировать правильно.однако, как только страница загружается в URL браузера, она выглядит следующим образом:

/posts/345%2Fthe-great-concept

, и, чтобы быть понятным, «имя» просто для красоты - сообщение извлекается только по id.Кроме того, я не хочу использовать подход слизня базы данных.

как мне лучше подходить к этому?

пс.тоже не хочу "/ posts / 345-the-great-concept" ...

1 Ответ

4 голосов
/ 03 апреля 2011

Он сбежал, потому что он не является частью пути, а является параметром, поэтому его нужно экранировать, иначе вы попадете не на тот URI.

def to_param
  "#{id}-#{name.parameterize.downcase}"
end

edit: Хорошо, значит, слеш действительноважный;Вот как это сделать:

Создайте собственный маршрут для этого:

# in config/routes.rb
resources :posts
match '/posts/:id/:slug' => 'posts#show', :as => :slug

Затем создайте свой метод слагов:

# in app/models/post.rb
def slug
  title.parameterize.downcase
end

Затем измените ваши маршруты на шоудействие, так что ссылка на причудливый URL:

# in any link to show; redirect after create, etc..
link_to slug_path(@post, :slug => @post.slug)

Я создал приложение, чтобы проверить все это, если интересно, вы можете проверить его по адресу: https://github.com/unixmonkey/Pretty-Path

...