rails使用friendly_id gem按资源名称路由访问

时间:2012-01-16 16:21:24

标签: ruby-on-rails ruby-on-rails-3 routing slug friendly-id

我有一个存储在City表中的城市列表。假设我想在此示例中通过resource.namecity.name生成可供访问的动态路由。

我希望能够访问/amsterdam/berlin。怎么样?

有关我正在使用 friendly_id gem的信息,因此如果更有意义,已经有了slug列。

3 个答案:

答案 0 :(得分:4)

假设您正确设置了friendly_id:

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

resources :cities

来自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

答案 1 :(得分:0)

在路线文件的结束处,添加以下内容:

match '*id' => 'cities#show

然后在你的CitiesController中:

def show
  @city = City.find(params[:id])
  # ...
end

答案 2 :(得分:0)

不知道这是否有帮助..但我已经在我的项目中使用了一个要点。

https://gist.github.com/1908782

它主要适用于我的工作,因为我的路线文件通常非常简洁。

它的美妙之处在于,如果你试图访问一条不存在的路径,它将不会遇到任何路线!

只是旁注,这在4.0版本中已经破解。在撰写本文时,您需要将以下内容放在gem文件中。

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

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

希望这有帮助。