为啥路由存在可以视为路由不匹配(​​RoutingError)?

Posted

技术标签:

【中文标题】为啥路由存在可以视为路由不匹配(​​RoutingError)?【英文标题】:Why does the route exist can be regarded as no route matches(RoutingError)?为什么路由存在可以视为路由不匹配(​​RoutingError)? 【发布时间】:2014-08-12 17:30:43 【问题描述】:

rails 服务器说

Started POST "/user/1/follow" 

ActionController::RoutingError (No route matches [POST] "/user/1/follow"):

但是使用rake routes

         Prefix Verb   URI Pattern                     Controller#Action
 followers_user GET    /users/:id/followers(.:format)  users#followers
followings_user GET    /users/:id/followings(.:format) users#followings
    follow_user POST   /users/:id/follow(.:format)     users#follow

根据上面的信息,我不知道为什么路由存在可以被视为没有路由匹配(RoutingError)。看来路线确实存在。

以下是可能与此问题相关的其他信息。我正在使用 jquery 来触发路由

  $.ajax(
            url: '/user/'+userId+'/follow',
            type: 'POST',

        );

而 users#follow 被定义为

    def follow
            if current_user?(@user)
                    flash[:error] = "You cannot follow yourself"
            elsif current_user.following?(@user)
                    flash[:error] = "You already follow #@user.name"
            end
            if request.xhr?
                    render status: current_user.follow(@user) ? 200 : 400, nothing: true
            end
    end

【问题讨论】:

【参考方案1】:

您已将路线定义为

follow_user POST   /users/:id/follow(.:format)     users#follow

但在 jQuery sn-p 中,您使用的是 /user/... 而不是 /users/...

【讨论】:

【参考方案2】:

你的路由的路径在jquery post中不一样,正确的路由'users/1/follow',我在工作中使用的一个超级tip,使用gemjs-routes,提供了他们在javascripts中可以访问的路由的路径。

希望这会有所帮助:)

【讨论】:

以上是关于为啥路由存在可以视为路由不匹配(​​RoutingError)?的主要内容,如果未能解决你的问题,请参考以下文章

Routing(路由模式)

Laravel 4 路由 - 如果条件不满足,则可以跳过路由

Orchard源码分析(7.1):Routing(路由)相关

在 Symfony 中,如果路由匹配,是不是可以转发到其他路由

为啥 Vue Router (0.7.13) 不匹配子路由?

Microsoft.AspNetCore.Routing路由