代码之家  ›  专栏  ›  技术社区  ›  Zack Shapiro

从我的JS客户机中放置一个URL/方法,另一个被击中

  •  2
  • Zack Shapiro  · 技术社区  · 7 年前

    Element s

    呼叫转到 Api::V1::ElementsController Foo 方法

    scope module: :api, as: :api do
      namespace :v1 do
        resources :users, only: [:show, :update] do
            resources :elements
            put 'elements/element_update_multiple', to: 'elements#foo'
    

    rake routes

    api_v1_user_elements_element_update_multiple PUT      /v1/users/:user_id/elements/element_update_multiple(.:format) api/v1/elements#foo
    

    然而,由于某种原因,当我从我的客户机对该路由执行PUT时,我的终端中出现以下错误

    无法从10.0.2.2中渲染控制台!允许的网络:127.0.0.1,::1127.0.0.0/127.255.255.255 ActiveRecord::SchemaMigration Load(0.4ms)选择“schema\u migrations”。*来自“schema_migrations” 通过Api处理:V1::ElementsController#更新为JSON

    它正在落入 update 方法而不是 foo 方法知道为什么会这样吗?谢谢

    2 回复  |  直到 7 年前
        1
  •  1
  •   NM Pennypacker    7 年前

    这是因为路由文件中路由的顺序。你需要像这样切换它们:

    put 'elements/element_update_multiple', to: 'elements#foo'
    resources :elements
    

    routes.rb 文件是顺序敏感的,因此如果Rails在到达您的自定义放置路径之前找到了匹配的路径(在本例中,它在您的资源路径中找到了更新方法),它将首先找到,而永远不会到达您的自定义放置路径。

        2
  •  0
  •   Segfault    7 年前

    将管线添加到 resources 尝试 Adding Collection Routes 像这样:

    scope module: :api, as: :api do
      namespace :v1 do
        resources :users, only: [:show, :update] do
            resources :elements do
              collection do
                put 'element_update_multiple', to: 'elements#foo'
              end
            end