rails 使用 friendly_id gem 按资源名称路由访问
Posted
技术标签:
【中文标题】rails 使用 friendly_id gem 按资源名称路由访问【英文标题】:rails routes access by resource name using friendly_id gem 【发布时间】:2012-02-11 13:36:21 【问题描述】:我有一个存储在City
表中的城市列表。假设我想生成动态路由,可以在本例中通过resource.name
、city.name
访问。
我希望能够访问/amsterdam
或/berlin
。怎么样?
对于信息,我正在使用 friendly_id gem,所以如果这更有意义的话,已经有了 slug 列。
【问题讨论】:
【参考方案1】:假设您正确设置了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
【讨论】:
【参考方案2】:在您的路线文件的末尾,添加以下内容:
match '*id' => 'cities#show
然后在你的 CitiesController 中:
def show
@city = City.find(params[:id])
# ...
end
【讨论】:
【参考方案3】:不知道这是否有帮助..但我总结了我在项目中使用的要点。
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'
希望这会有所帮助。
【讨论】:
以上是关于rails 使用 friendly_id gem 按资源名称路由访问的主要内容,如果未能解决你的问题,请参考以下文章
通过 Friendly_Id Gem 在 URL 中使用 Slug 和 id