2011-04-08 199 views
0

我在Rails 3中工作的一个应用程序有一个City模型。每个城市都有一个“名称”栏。我想这个City.name是基地网址。rails 3动态路由

例如,城市名称为“Los Angeles”: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

等网址..

什么建议可以给将不胜感激!

回答

1

我个人使用Friendly Id来处理漂亮的URL到ActiveRecord钩子(顺便说一句,非常好)。这个gem也有嵌套的资源支持。

+0

这对slu nice很好!尽管如此,它不会对我的routes/link_to问题做任何事情。 – goddamnyouryan 2011-04-08 04:11:48

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

如果你想城是你的根控制器,在routes.rb中:现在

map.root :controller => 'city' 

http://myapp.com/los-angeles应该工作。