如何在Rails 3中将Rails路由从控制器/:id更改为控制器/:名称?

时间:2010-07-13 20:16:04

标签: ruby-on-rails routing

正如话题所说。我想在Rails 3中将默认控制器/:id路由更改为controller /:name。在Rails 2中,您使用了类似这样的命名路由:

配置/ routes.rb中

map.location 'location/:name', 
  :controller => 'your_controller', :action => 'your_action'

备用命名路线

map.location 'goto/:name', :controller => 'location', :action => 'your_action'

视图中的网址规范示例

<%= link_to 'foo', location_url({:name => 'foo'}) %>
<%= link_to 'bar', location_path({:name => 'bar'}) %>

但我确信在Rails 3中还有另一种(更好的)方式。

4 个答案:

答案 0 :(得分:4)

如果:name是对象的唯一标识符,则可以https://github.com/norman/friendly_id获取ActiveRecord的常规永久链接支持。

仅指定

has_friendly_id :name

你会像

一样自动路由

http://example.com/states/washington

而不是

http://example.com/states/4323454

答案 1 :(得分:0)

不确定,但这可能会对你有所帮助。

匹配'user_delete /:name',:to =&gt;的会话#破坏'

这与

相同

map.user_delete'/ user_delete /:name',: controller =&gt; 'sessions',:action =&gt; '销毁'

答案 2 :(得分:0)

试试这个:

match 'location/:name' => 'your_controller#your_action', :as => location

答案 3 :(得分:0)

如果你有location.name,那么你可以像这样链接到它:

<%= link_to 'foo', location_path(location.name) %>

会给你url / locations /:name

而不是

<%= link_to 'foo', location %> #same as <%= link_to 'foo', location_path(location) %>

会给你/ locations /:id