Rails 5定义带参数路由遇Missing :action key错误,如何正确配置?
解决Rails 5搜索路由的错误问题
你的错误提示是Missing :action key on routes definition,本质是路由定义没有让Rails明确找到对应的控制器动作。问题出在你写的搜索路由上——虽然你指定了to: :search,但在带参数的collection路由场景下,Rails没能正确识别对应的控制器和动作。
给你两种正确的写法:
写法一:在collection块内明确指定控制器和动作
保持你原来的资源嵌套结构,把搜索路由的to: :search改成完整的"people#search",这样Rails能清晰定位到对应的控制器和动作:
resources :people do collection do get 'image/:id', to: "people#image", as: 'image' get 'ranks', to: "people#ranks", as: 'ranks' get 'search/:search(.:format)', to: "people#search", as: 'people_search' end end
这里加上as: 'people_search'是为了生成便捷的路由辅助方法,比如你可以在视图或控制器里用people_search_path("张三")直接生成/people/search/张三这样的路径。
写法二:直接定义独立路由
如果不需要嵌套在resources :people的结构里,也可以单独定义这条路由,逻辑更直观:
# 先定义搜索路由 get '/people/search/:search(.:format)', to: 'people#search', as: 'people_search' # 保留其他资源路由 resources :people do collection do get 'image/:id', to: "people#image", as: 'image' get 'ranks', to: "people#ranks", as: 'ranks' end end
最后别忘了在app/controllers/people_controller.rb里实现search动作,比如:
def search @people = Person.where("name LIKE ?", "%#{params[:search]}%") # 后续添加视图渲染或JSON返回逻辑 end
内容的提问来源于stack exchange,提问作者user7055375
相关产品推荐
相关产品推荐

