【问题标题】:Ruby routes and link_to, custom :action route problemRuby 路由和 link_to,自定义 :action 路由问题
【发布时间】:2010-06-28 17:49:24
【问题描述】:

我正在尝试获取此链接:

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

甚至明确尝试过 'users', :action => 'manage', :id => user}, :method => :get) %>

以 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"}

所以我添加了一个ma​​p.connect,但它被添加到users

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' 链接而不是 '/users/manage?id=1'???是不是因为我上面的ma​​p.connect正在被添加到users,什么时候应该添加到'manage_users'

感谢您的帮助。我会努力弄明白的。

和平。

顺便说一句,/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'

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案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 文件。

    【讨论】:

    • 我添加了一张地图来获取 GET 的 manage_user 而不是用户部分:map.resources :users, :member => { :manage => :get } 给予 manage_user GET /users/:id/manage(.:format) {:action=>"manage", :controller=>"users"} 但仍然是相同的 'manage?id=1' 链接。会尝试你的建议。
    • 哎呀。忘记了你帖子的第二部分,link_to。有用!谢谢!!!!嗯......相当复杂的东西eheheheh
    • user)) %> + EITHER( map.resources :users, :member = > { :manage => :get }map.manage_user '/users/:id/manage', :controller => :users, :action => :manage ) = '/users/1/manage'。再次感谢尼基塔。
    • 澄清一下:问题出在“link_to”创建中,而“manage_user”路由没有创建。
    【解决方案2】:

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

    另外,在创建链接时试试这个:

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

    【讨论】:

    • 不,那是另一回事,无论有没有 :id 都需要工作(单--member--和复数--collection--)。不过感谢您的评论:),是的,link_to 需要来自资源的路径。 map.resources :users, :collection => {:manage => :get} 和 map.resources :users, :member => { :manage => :get }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    相关资源
    最近更新 更多