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