我在routes.rb文件中设置了以下路由:
resources :people do
collection do
get :search
end
end
当我对网址http://localhost:3000/people/search.json?term=stepeb执行操作时, 服务器报告它正在响应show动作,使用正确的term参数,但也有一个id参数,设置为“search”。
我认为这个问题是两个网址 节目网址将是:
/people/:id
我相信路由器在到达/ people / search
之前匹配该路由如果是这样的话,基于收集的路线将如何运作?他们都不会受到节目动作的影响吗?
佣金路线的相关部分如下:
search_people GET /people/search(.:format) {:action=>"search", :controller=>"people"}
GET /people(.:format) {:action=>"index", :controller=>"people"}
people POST /people(.:format) {:action=>"create", :controller=>"people"}
new_person GET /people/new(.:format) {:action=>"new", :controller=>"people"}
GET /people/:id(.:format) {:action=>"show", :controller=>"people"}
PUT /people/:id(.:format) {:action=>"update", :controller=>"people"}
person DELETE /people/:id(.:format) {:action=>"destroy", :controller=>"people"}
edit_person GET /people/:id/edit(.:format) {:action=>"edit", :controller=>"people"}
答案 0 :(得分:27)
答案 1 :(得分:1)
我也有类似的问题。根据你的例子,我的routes.rb看起来像这样
resources :people
...
resources :people do
collection do
get :search
end
end
将其更改为:
resources :people do
collection do
get :search
end
end
...
resources :people
我可以访问该系列...... 顺便说一下,这是添加路线的合适方式吗?即,在向控制器添加动作并留下“旧”资源时添加新路线是不错的风格:人们喜欢它?
答案 2 :(得分:0)
您运行的是什么版本的Rails?尝试使用您在此处提供的代码创建测试应用程序,看看它是否有效。可能还有其他一些你没有提到的冲突。
在Rails 3.0.0beta4上使用您的代码产生了预期的结果:
Started GET "/people/search.json?term=boo" for 192.168.1.2 at 2010-06-23 03:39:26 -0400
Processing by PeopleController#search as JSON
Parameters: {"term"=>"boo"}
Completed in 49ms
这是我的路线档案:
resources :people do
collection do
get :search
end
end
我有一个people_controller.rb,其中定义了搜索方法。