我在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这样的网址
等。
非常感谢您给予的任何建议!
答案 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应该有效。