我想在控制器中实现一个搜索功能,其中包含“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
作为我的要求?
答案 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
。
答案 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