Routing in Rails making the Username an URL:

强颜欢笑 提交于 2019-12-01 01:09:29

When you create or update your models, you send POST /registries or PUT /registries/1.

But /registries is matched by your last rule match '/:name' => "registries#show", so the request hits the show action.

If you run rake routes you should see something like this:

                POST   /registries(.:format)                 registries#create
                PUT    /registries/:id(.:format)             registries#update
                DELETE /registries/:id(.:format)             registries#destroy
                       /:name(.:format)                      registries#show

You can add method parameter to your route, so that it will hit show only on GET request.

match '/:name' => "registries#show", :via => :get

But there are still can be collisions in the future. For example, if you have registry name users. So, it's commonly suggested to use prefixes (match '/r/:name') or define set of allowed names, or choose safe names for registries.

P.S. I don't think load_and_authorize_resource will work for your show action by default. Because it expects params[:id] to load the resource automatically.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!