使用routes.rb制作漂亮的网址

时间:2011-06-21 02:13:06

标签: ruby-on-rails

我想为此做点什么,我相信:

map.connect 'show/:company_name/:id',
            :controller => 'companies',
            :action     => 'show'

基本上,每次调用show动作时,我都希望它采用company_name参数并将其放入url中(show /:company_name /:id)

但是,似乎我使用旧的(rails 2.x路由api)并且无法使用map.connect而不会出现错误。我该如何升级?

有没有办法用“匹配”来做到这一点?

谢谢!

===================

这是我在尝试使用map.connect时看到的错误:

undefined local variable or method `map' for #<ActionDispatch::Routing::Mapper:0x103757458>

2 个答案:

答案 0 :(得分:4)

我认为你的路线在第一行没有“/”符号。 试试这个:

match '/show/:company_name/:id' => 'companies#show'

您可以使用命令rake routes检查路线路径。

-

此外,show动作是Rails中的默认RESTful方法。我建议你更改一个等效的单词,并为将来或其他情况保留“show”动作。

在Rails惯例中,您可以使用show action编写resources :companies,路径为/companies/:id

在app / models / company.rb中进行一些调整

def to_param
  self.name
end

因此,您的网址将显示为http://yourdoamin.com/companies/37signals

在app / controllers / companies_controller.rb

@company = Company.find_by_name(params[:id])

答案 1 :(得分:0)

如果我了解你的目标,请尝试

match 'companies/show/:company_name/:id' => 'companies#show'