Rails 3 - настройка ресурсных маршрутов - PullRequest
0 голосов
/ 07 марта 2011

У меня есть ресурсные маршруты для блога (название модели: Article).

Я хочу настроить свой ресурсный маршрут так, чтобы он указывал на

articles/show/title-of-my-article

Теперь я читаю это:

http://edgeguides.rubyonrails.org/routing.html#customizing-resourceful-routes

Но, похоже, не объясняется, как перезаписать параметры, а не только: controller или: action.Дело в том, что я мог бы использовать отдельный ресурс или соответствовать запросу GET, но я бы хотел перезаписать свои ресурсоемкие маршруты, чтобы я мог по-прежнему использовать все помощники ресурса (например, article_path (@ article.title)) и т. Д.

Может кто-нибудь помочь мне здесь, любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Вам следует переопределить метод to_param в вашей модели:

class Article
  def to_param
    self.title
  end
end

Если вы хотите стать немного хитрее, вы должны прочитать о создании пользовательских слагов .

0 голосов
/ 07 марта 2011

В дополнение к ответу Джонни.

Перезапись метода to_param приведет к появлению заголовка при вызове помощников ресурса, например article_path(@article), и он будет передан в качестве params[:id] контроллеру.

После этого вам нужно будет найти статью более или менее вручную, то есть вместо того, чтобы делать

Article.find(params[:id])

Вам нужно будет сделать

Article.find_by_title(params[:id])

Я не помню, создает ли это исключение NotFound, если запись не найдена как метод find, сделайте так, в этом случае вам придется вручную проверить, была ли найдена запись, и вызвать исключение самостоятельно. если бы не было, чтобы вызвать страницу 404.

Одна из проблем, возникающих при этом, состоит в том, что заголовок может состоять из символов, которые не разрешены или не рекомендуются в URL-адресе, поэтому лучшим подходом было бы сохранить слаг в зависимости от заголовка в базе данных и найти его таким образом.

(Вы можете создать слаг автоматически при наличии фильтра в модели и создать его title.parameterize)

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

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