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之前