我 rake routes,只能得到
Prefix Verb URI Pattern Controller#Action
GET / front#index
GET|POST /:controller(/:action(/:id(.:format))) :controller#:action
然后在 views 中只能把链接写死了
<a href="/User/login">点此登陆</a>
其实这样写也不麻烦,只是我亲爱的 rubymine 会有语法警告,背景变成屎黄色,当然也不会有自动完成了

感谢分享看法,刚才我也遇到这个困扰了,写了个 before_action
def only_post_method
if request.method != 'POST'
render plain: '只允许post提交'
end
end
before_action :only_post_method, :only => [:create, :update]
感谢各位大虾的指点,用动态路由果然越往后坑越多。
1、首先 rails 日志里已经警告 5.2 以后的版本将不支持动态路由匹配
2、用我自己实现的那种 before_action 过滤 post 方法,会导致需要过滤的 action 越来越多,自己都搞混乱了。还不一定安全。
3、不用动态路由,rubymine 的自动提示又回来了,比自动路由还方便

至于 rubymine 之前的路由提示为什么会失效呢?这里有一个小插曲,我创建 controller 的时候命名忘了加 s,结果生成了 user_controller.rb,而不是 users,这样也能运行,但是不够 rails way 了,结果再 rubymine 里面的路由提示就失效了,现在改回来了,rubymine 的提示又回来了。
实际做项目的时候,会用到 member、scope、subresource 等等,光动态路不够用。这样还要写额外的路由,那还不如直接用 dsl。这样万一有其他人接手项目,一看 routes.rb 就知道项目大概有哪些功能,对他十分友好。还有用自动路由,只要有方法没有设置为 private,就可以直接输入 url 调用。假如你继承了 devise 的 controller 自己实现了一些 action,我就可以自己合成 url 和 param 来直接访问 devise 的 action 绕过去。