我正在Rails 3中工作的应用程序有一个城市模型。每个城市都有一个"名称"列。我希望city。name作为基url。
例如,城市名称为"Los Angeles":http://myapp.com/los-angeles.
如果我使用
match '/:name' => "cities#show"
resources :cities
我可以得到http://myapp.com/Los%20Angeles,但我需要它是'los-angeles'。我假设我需要更改城市中的to_params。rb文件。
另外,我的link_to在工作时应该是什么样子?现在我正在尝试
<%= link_to "View", city_path(:name => @city.name) %>
这给了我这个错误:
No route matches {:action=>"destroy", :name=>"Los Angeles", :controller=>"cities"}
最后,您应该注意到,我计划在路由中的City下面嵌套资源,因此我最终得到了http://myapp.com/los-angeles/messages/message-content-using-to-param
这样的url。等。
如果您能给我任何建议,我将不胜感激!
我个人使用Friendly Id来处理带有ActiveRecord钩子的漂亮url(顺便说一下,真的很好)。
这里描述的方法是一种方法。重写to_param
在Rails文档中也有描述。
将此添加到您的City模型中。
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应该可以工作了