направляет доступ к маршрутам по имени ресурса, используя гем friendly_id - PullRequest
1 голос
/ 16 января 2012

У меня есть список городов, хранящихся в таблице City.Допустим, я хочу создать динамические маршруты, которые будут доступны через resource.name, city.name в этом примере.

Я хочу иметь возможность посетить /amsterdam или /berlin.Как?

Для информации, я использую гем friendly_id , поэтому уже есть столбец слагов, если это имеет больше смысла.

Ответы [ 3 ]

4 голосов
/ 17 января 2012

Если вы правильно установили friendly_id:

match '/cities/:name' => 'cities#show'

или

resources :cities

Из Quick Start для friendly_id gem:

class City < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, use: :slugged
end

Также:

# If you're adding FriendlyId to an existing app and need
# to generate slugs for an existing model, do this from the
# console, runner, or add a Rake task:

City.find_each(&:save)

Вот RailsCast на нем: http://railscasts.com/episodes/314-pretty-urls-with-friendlyid?view=asciicast

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

Не знаю, поможет ли это ... но я собрал суть того, что я использую в своих проектах.

https://gist.github.com/1908782

В основном это работает для того, что я делаю какМой файл маршрутов, как правило, довольно лаконичен.

Вся прелесть в том, что если вы попытаетесь посетить путь, который не существует, он не попадет ни на один маршрут!

Простопримечание стороны, это сломано в выпуске 4.0.На момент написания этой статьи вам нужно будет добавить в свой gemfile следующее:

gem 'friendly_id', :git => 'git://github.com/norman/friendly_id.git'

или

gem 'friendly_id', :git => 'https://github.com/norman/friendly_id.git'

Надеюсь, это поможет.

0 голосов
/ 18 января 2012

В конце вашего файла маршрутов добавьте:

match '*id' => 'cities#show

Тогда в вашем CitiesController:

def show
  @city = City.find(params[:id])
  # ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...