Rails 3动态路由



我正在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应该可以工作了

相关内容

  • 没有找到相关文章

最新更新