Rails:在控制器中,一个新视图总是由`show`呈现?

时间:2014-08-14 02:04:34

标签: ruby-on-rails ruby

我想在控制器中实现一个搜索功能,其中包含“show,new,create等...”

我添加了route.rb

get 'apps/search' => 'apps#search'

apps_controller.rb

def show
  @app_info = App.find(params[:id])
end

def search
  # get parameter and do search function
end

但每当我请求/ apps / search?xxx = xxx时,它将由show呈现...然后search?xxx=xxx是方法show的参数。 ..

我应该为search创建一个新的控制器吗?或者是否可以实施search作为我的要求?

3 个答案:

答案 0 :(得分:4)

您的路线优先级不正确 - 路线文件中的其他位置(get 'apps/search'行之前)您拥有resources :apps,其定义的路线与apps/search匹配相同的正则路由。< / p>

路由从上到下匹配,因此如果您检查rake routes的输出,您会发现您对apps/search的请求实际上与apps/:id匹配 - 这是显示您的应用资源的路线。

apps/search路线移到resources :apps声明之上,或者将您的搜索路线声明为应用资源的一部分,例如

resources :apps do
  get :search, on: :collection
end

(这将以您希望的方式定义apps/search

有关路由的详细信息:http://guides.rubyonrails.org/routing.html

答案 1 :(得分:-1)

我认为你应该按照以下方式编辑route.rb:

get 'apps/search' => 'apps#show'

答案 2 :(得分:-1)

Rails的“说”搜索方式是应用程序控制器使用集合的新途径。因此,例如,假设您已经拥有resources :apps,您可以这样做:

resources :apps do
  get 'search', on: :collection #or you can use another HTTP verb instead of get
end

这会给你:

 search_apps GET    /apps/search(.:format)    apps#search