Ruby on rails Rails:在控制器中,新视图始终由“show”呈现?

Ruby on rails Rails:在控制器中,新视图始终由“show”呈现?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想在控制器中实现一个搜索功能,其中包含“显示、新建、创建等…” 我在route.rb中添加了: get 'apps/search' => 'apps#search' def show @app_info = App.find(params[:id]) end def search # get parameter and do search function end 在apps\u controller.rb中: get 'apps/search' => 'apps#s

我想在控制器中实现一个搜索功能,其中包含“显示、新建、创建等…”

我在
route.rb中添加了:

get 'apps/search' => 'apps#search'
def show
  @app_info = App.find(params[:id])
end

def search
  # get parameter and do search function
end
apps\u controller.rb
中:

get 'apps/search' => 'apps#search'
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
的参数


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

您的路线优先级不正确-在路线文件中的其他地方(在
获取“apps/search”
行之前),您有
资源:apps
,它定义了与
apps/search
相同的正则表达式匹配的路线

路由从上到下匹配,因此如果检查
rake Routes
的输出,您将看到对
apps/search
的请求实际上与
apps/:id
匹配,这是应用资源的显示路由

apps/search
路径移动到
resources:apps
声明上方,或者将搜索路径声明为apps资源的一部分,例如

resources :apps do
  get :search, on: :collection
end
(这将以您想要的方式定义
应用程序/搜索


有关路由的更多信息:

我认为您应该编辑route.rb,如下所示:

get 'apps/search' => 'apps#show'
Rails“说”搜索的方式是一种新的途径,通过它,应用程序控制器可以使用collection。因此,例如,假设您已经有了一个
资源: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

在显示“这不是你在堆栈上标记代码的方式”之前,请尝试放置
get'apps/search'=>'apps#search'
,请求可能被路由中更高的路由捕获。rb(它是自上而下处理的)和“search?xxx=xxx”正在被识别为id。请尝试将
get'apps/search'=>“apps#search”
放在发送到apps#show之前