2010-01-16 4 views
4

Я в настоящее время разрабатывает систему ведения блогов с Ruby On Rails и хотите, чтобы пользователь, чтобы определить его «пермалинки» для статических страниц или сообщений в блоге, а это означает:Permalinks с Ruby On Rails (динамические маршруты)

пользователь должен возможность установки имени страницы, например. «тестовая статья» (которая должна быть доступна через/posts/test-article) - как я мог бы это реализовать в приложениях rails и файле маршрутизации?

ответ

3

Модификация метода to_param в модели в самом деле требуется/удобно, как и другие уже сказал:

def to_param 
    pagename.parameterize 
end 

Но для того, чтобы найти сообщения вы также должны изменить контроллер, так как методы по умолчанию Post.find ищет идентификатор, а не pagename. Для действия шоу вам понадобится примерно следующее:

def show 
    @post = Post.where(:pagename => params[:id]).first 
end 

То же самое касается других методов действий.

Правила маршрутизации могут оставаться такими же, как и для обычных маршрутов с идентификационным номером.

0

У вас должен быть атрибут seolink или permalink в объектах страниц или сообщений. Затем вы просто используете метод to_param для своей публикации или модели страницы, которая вернет этот атрибут.

to_param метод используется в методах *_path, когда вы передаете им объект.

Так что, если ваш пост имеет название «Foo бар» и seolink «БАЗ-quux», вы определяете метод to_param в модели, как это:

def to_param 
    seolink 
end 

Тогда, когда вы делаете что-то вроде post_path(@post) вы получите /posts/baz-quux или любой другой соответствующий URL-адрес, который вы настроили в файле config/routes.rb (мой пример применим к находчивым URL-адресам). В действии вашего контроллера вам нужно будет только find_by_seolink вместо find[_by_id].

2

Я лично предпочитаю, чтобы сделать это таким образом:

Вставьте следующий сообщение модели (вставить его в нижней части до «конца» тега закрытия)

def to_param 
    permalink 
end 

def permalink 
    "#{id}-#{title.parameterize}" 
end 

Вот так. Вам не нужно менять какие-либо методы find_by. Это дает вам URL-адрес формы «123-title-of-post».

+0

Это плохая практика SEO, поскольку Google видит первые слова в URL как более важные, чем последние – Houen

+0

@ Вы хотите удалить идентификатор?Разумеется, несколько лишних цифр не будут иметь особого значения/У вас есть какие-либо ссылки на вещи, которые делают это более ясным? Это то же самое для всех поисковых систем (yahoo, bing и т. Д.). Спасибо. – stephenmurdoch

+0

. Его acutally не так много о цифрах, как о количестве слов, а тире рассматривается как разделитель слов Google. Первые слова несут наибольший вес SEO. Извините, никаких ссылок на это, это было то, что говорили ораторы в Google IO 2010 – Houen

1

#63 и #117 эпизоды railscasts могут вам помочь. Также проверьте ресурсы там.

4

для удобства постоянных ссылок вы можете использовать gem 'has_permalink'. Для получения более подробной информации http://haspermalink.org

2

Вы можете использовать драгоценный камень friendly_id. Никаких специальных изменений контроллера не требуется. Просто добавьте атрибут, например, slug к вашей модели. Для более подробной информации проверьте github repo драгоценного камня.

Смежные вопросы