在Rails 4控制台中如何获取控制器方法的路径?(Devise 4.2场景实操报错问题)
在Rails 4控制台中获取Devise自定义会话控制器的路径
你遇到的NoMethodError是因为url_for并非全局可用方法——它属于Rails的路由辅助模块,直接在控制台的main对象下调用当然会报错。下面给你几个在Rails 4控制台中正确获取目标路径的方法:
方法一:使用控制台内置的app对象(最便捷)
Rails控制台自带了一个app对象,它模拟了请求上下文,包含所有路由辅助方法。你可以直接调用对应的路径方法:
# 获取POST /sessions的路径(对应create方法) app.sessions_path # 如果你需要确认是POST请求对应的路径,也可以加上method参数 app.sessions_path(method: :post)
因为你在devise_scope :user下配置了post 'sessions' => 'sessions#create',路由生成的辅助方法就是sessions_path,对应POST请求的创建会话接口。
方法二:引入路由辅助模块后调用
如果你想直接使用url_for,可以先引入Rails的路由辅助模块:
# 先引入路由辅助模块 include Rails.application.routes.url_helpers # 调用url_for指定控制器和动作 url_for(controller: 'auth/sessions', action: :create, only_path: true) # 或者直接用路径辅助方法 sessions_path(only_path: true)
额外技巧:验证路由映射关系
如果你想确认路径对应的控制器和动作是否正确,可以用recognize_path方法:
Rails.application.routes.recognize_path('/sessions', method: :post)
执行后会返回类似这样的哈希:
{:controller=>"auth/sessions", :action=>"create", :format=>nil}
这样就能确认路由确实映射到了你定义的Auth::SessionsController#create。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

