Постоянные ссылки с Ruby on Rails (динамические маршруты) - PullRequest
4 голосов
/ 16 января 2010

В настоящее время я разрабатываю систему ведения блогов с использованием Ruby on Rails и хочу, чтобы пользователь определял свои «постоянные ссылки» для статических страниц или сообщений в блоге, что означает:

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

Ответы [ 6 ]

4 голосов
/ 15 мая 2013

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

3 голосов
/ 16 января 2010

Изменение метода to_param в модели действительно требуется / удобно, как уже говорили другие:

def to_param
  pagename.parameterize
end

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

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

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

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

2 голосов
/ 15 мая 2013

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

2 голосов
/ 16 января 2010

Я лично предпочитаю делать это так:

Поместите следующее в вашу модель Post (прикрепите его внизу перед закрывающим тегом 'end')

def to_param
  permalink
end

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

Вот и все. Вам не нужно менять ни один из методов find_by. Это дает вам URL-адреса вида "123-title-of-post".

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

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

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

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

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

Итак, если ваше сообщение имеет заголовок "foo bar" и seolink "baz-quux", вы определяете метод to_param в модели следующим образом:

def to_param
  seolink
end

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

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