Ruby路由和link_to,自定义:动作路由问题

时间:2010-06-28 17:49:24

标签: ruby-on-rails ruby

我正在尝试获取此链接:

<%= link_to('Edit', :action => 'manage', :id => user) %>

甚至明确尝试&lt;%= link_to('Edit',{:controller =&gt;'users',:action =&gt;'manage',:id =&gt; user},:method =&gt;:get )%&gt;

将HTML中的链接显示为

 '/users/manage/1' or '/users/1/manage'

但它显示为

'/users/manage?id=1'

我可以在我的路线中看到:

manage_users GET    /users/manage(.:format)            {:action=>"manage", :controller=>"users"}
...
edit_user GET    /users/:id/edit(.:format)          {:action=>"edit", :controller=>"users"}

所以我添加了 map.connect ,但它已添加到用户

users    GET    /users/manage/:id(.:format)        {:action=>"manage", :controller=>"users"}

但没有任何成功。该链接仍然是'/ users / manage?id = 1'

这不再适用于上述情况。

GET    /users/:id/manage(.:format)        {:action=>"manage", :controller=>"users"}

现在,当我把:action放在link_to中,去'编辑'即

<%= link_to('Edit', :action => 'edit', :id => user) %>

routes.rb edit_user GET / users /:id / edit /(:。format)有效,链接显示

'/users/1/edit'

如何在“管理”而不是“修改”时让我的link_to显示相同的链接,即显示'users / 1 / manage'的链接,而不是 '/用户/管理?编号= 1' ???是因为上面的 map.connect 被添加到用户,应该添加到'manage_users'吗?

感谢您的帮助。我会试着搞清楚。

和平。

BTW, / users / manage?id = 1 有效,我只想要正确的重写链接点击。

编辑 routes.rb

map.resources :users, :collection => {:manage => :get}

#map.manage_user '/users/:id/manage', :controller => :users, :action => :manage
#map.resources :users, :member => { :manage  => :get } 
#map.connect 'users/manage/:id(.:format)', :controller => 'users', :action => 'manage',  :conditions => { :method => :get }

map.resources :categories
map.resources :posts
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

2 个答案:

答案 0 :(得分:1)

所以我添加了一个map.connect,但它已被添加到用户中 我怀疑你在其他定义之后添加了map.connect ,这会给它最低优先级。尝试将它放在routes.rb文件的开头。

您还可以使用命名路由来避免混淆:

map.manage_user '/users/:id/manage', :controller => :users, :action => :manage

然后将其称为

link_to 'Manage', manage_user_path(:id => user)

修改
如果这不起作用,请显示您的routes.rb文件。

答案 1 :(得分:0)

在定义collection时,您应该在routes.rb中将member更改为map.resources :users。然后你会得到很好的/users/1/manage链接。

此外,在创建链接时请尝试以下操作:

<%= link_to 'Manage', manage_user_path(user) %>