2014-09-18 44 views
0

我对路由选择感到不知所措。 '$ .ajax - > lh:3000/nodes/search?q = blabla & _ = 1411073392872' 路由到节点#显示并显然失败,因为显示会需要类似/节点/ 3 /与ID工作。/x /搜索路由到x#显示,而不是x#搜索

耙路线

welcome_index GET /welcome/index(.:format)  welcome#index 
      root GET /       welcome#index 
      nodes GET /nodes(.:format)    nodes#index 
       POST /nodes(.:format)    nodes#create 
     new_node GET /nodes/new(.:format)   nodes#new 
     edit_node GET /nodes/:id/edit(.:format)  nodes#edit 
      **node GET /nodes/:id(.:format)   nodes#show** 
       PATCH /nodes/:id(.:format)   nodes#update 
       PUT /nodes/:id(.:format)   nodes#update 
       DELETE /nodes/:id(.:format)   nodes#destroy 

    edges_to_node GET /nodes/:id/toedges(.:format) nodes#searchtoedges 
edges_from_node GET /nodes/:id/fromedges(.:format) nodes#searchfromedges 
    search_edges GET /edges/search(.:format)  edges#search 
    **search_nodes GET /nodes/search(.:format)  nodes#search** 

在routes.rb中我得到这个

resources :nodes 
resources :edges 
get 'nodes/:id/toedges', to: 'nodes#searchtoedges', as: 'edges_to_node' 
get 'nodes/:id/fromedges', to: 'nodes#searchfromedges', as: 'edges_from_node' 
get '/edges/search', to: 'edges#search', as: 'search_edges' 
**get '/nodes/search', to: 'nodes#search', as: 'search_nodes'** 

其它所有路由工作特别是那些searchtoedges的。如果这很重要,我在ajax调用中使用/ nodes/search。对ajax的响应是一个RecordNotFound异常,抱怨show操作中没有id。所以由于某种原因,它会路由到'/ nodes /:id(。:format)=> nodes#show'。我不明白为什么。

回答

2

从上到下路由匹配。匹配/nodes/search的第一条路线是您的展示路线,其ID为"search"。因此,对于/nodes/search一个GET请求由预定航线相匹配

移动定制get /nodes/search路线上述resources :nodes线。

或者,将其添加到您的资源声明:

resources :nodes do 
    collection { get 'search' } 
end 
相关问题