Красивый URL в Rails при линковке - PullRequest
0 голосов
/ 15 января 2010

Допустим, у меня есть приложение для ведения блога Ruby on Rails с моделью Post. По умолчанию вы сможете читать сообщения по http://.../post/id. Я добавил маршрут

map.connect ':title', :controller => 'posts', :action => 'show'

, который примет http://.../title (заголовки уникальны), и контроллер выполнит запрос для заголовка и отобразит страницу. Однако когда я сейчас вызываю <% = link_to h (post.title), post%> в представлении, Rails по-прежнему дает мне ссылки типа post / id.

Можно ли заставить Rails автоматически создавать красивые ссылки для меня в этом случае?

Ответы [ 4 ]

1 голос
/ 15 января 2010

Если вы готовы принять: http: /.../ 1234-title-text, вы можете просто сделать:

def to_param
  [id, title.parameterize].join("-")
end

AR::Base.find игнорирует бит после идентификатора, поэтому он "просто работает".

Чтобы убрать название /, попробуйте назвать ваш маршрут:

map.post ':id', :controller => 'posts', :action => 'show', :conditions => {:id => /[0-9]+-.*/ }

Убедитесь, что этот маршрут появляется после любого map.resources :posts вызова.

0 голосов
/ 07 февраля 2012

Для вас есть драгоценный камень, чтобы сделать это идеально

https://github.com/rsl/stringex

0 голосов
/ 15 января 2010

Я бы использовал столбец постоянной базы данных, маршрут, и я обычно пропускаю использование link_to в пользу более быстрых тегов привязки HTML.

Настройка вашего маршрута как:

map.connect '/post/:permalink', :controller => 'post', :action => 'show'

затем в посте posts_controller:

link = params[:permalink]
@post = Post.find_by_permalink(link)

Ваша ссылка тогда будет

<a href="/post/<%= post.permalink %>">Link</a>

затем в вашем методе create перед сохранением для создания постоянной ссылки

@post = Post.new(params[:post])
@post.permalink = @post.subject.parameterize
if @post.save
  #ect
0 голосов
/ 15 января 2010

Вы можете переопределить метод to_param ActiveRecord и заставить его возвращать заголовок. Таким образом, вам не нужно создавать свой собственный маршрут для него. Просто не забудьте URL кодировать его.

Что может быть лучшим решением, так это взглянуть на то, что Ruby Toolbox может предложить, когда речь идет о постоянных ссылках . Я думаю, что использовать один из них будет лучше, чем исправить его самостоятельно с помощью to_param.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...