rails 3动态路线

时间:2011-04-08 03:27:11

标签: ruby-on-rails ruby-on-rails-3 routes

我在Rails 3中使用的应用程序有一个City模型。每个城市都有一个“名称”栏。我希望这个City.name成为基本网址。

例如,城市名称为“洛杉矶”:http://myapp.com/los-angeles

如果我使用

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

我可以得到http://myapp.com/Los%20Angeles,但我需要它是'洛杉矶'。我假设我需要更改city.rb文件中的to_params。

此外,当这个工作正常时,我的link_to应该是什么样子?现在我正在尝试

 <%= link_to "View", city_path(:name => @city.name) %>

这就是给我这个错误:

No route matches {:action=>"destroy", :name=>"Los Angeles", :controller=>"cities"}

最后,你应该注意我计划在路线中的城市下面嵌套资源,这样我最终会得到像http://myapp.com/los-angeles/messages/message-content-using-to-param这样的网址

等。

非常感谢您给予的任何建议!

2 个答案:

答案 0 :(得分:1)

我个人使用Friendly Id来处理带有ActiveRecord挂钩的漂亮网址(顺便说一句,这很棒)。这个gem也有嵌套的资源支持。

答案 1 :(得分:1)

方法described here将是一种方法。覆盖to_param也在Rails docs

中进行了描述

将此添加到您的城市模型。

def to_param
    "#{self.name_for_url}" 
end

def name_for_url
    self.name.gsub(/^A-Z0-9\-_/i,'')
end

这会导致city_path(@city)提供/cities/los-angeles

如果您希望City成为您的根控制器,请在routes.rb中填写:

map.root :controller => 'city'

现在,http://myapp.com/los-angeles应该有效。