【问题标题】:Nested resource in Rails3, no route matchRails3中的嵌套资源,没有路由匹配
【发布时间】:2011-10-18 21:20:36
【问题描述】:

我在 rails 3 中有一个嵌套路由,映射为

resources :maps do
    resource :versions
    member do
        post 'share'
        get  'share'            
    end

end

但是当我尝试连接到http://localhost:3000/maps/35/versions/2 时,我得到了

没有路线匹配“/maps/35/versions/2”

在 rake 路线中 GET /maps/:map_id/versions/:id(.:format) {:controller=>"versions", :action=>"show"} 或类似的(带有:id)丢失 其他带有版本的路由正常工作

怎么了?

编辑 2: 这是完整的 rake 路由输出

maps_public GET    /maps/public(.:format)                 {:controller=>"maps", :action=>"public"}
            map_versions POST   /maps/:map_id/versions(.:format)       {:controller=>"versions", :action=>"create"}
        new_map_versions GET    /maps/:map_id/versions/new(.:format)   {:controller=>"versions", :action=>"new"}
       edit_map_versions GET    /maps/:map_id/versions/edit(.:format)  {:controller=>"versions", :action=>"edit"}
                         GET    /maps/:map_id/versions(.:format)       {:controller=>"versions", :action=>"show"}
                         PUT    /maps/:map_id/versions(.:format)       {:controller=>"versions", :action=>"update"}
                         DELETE /maps/:map_id/versions(.:format)       {:controller=>"versions", :action=>"destroy"}
               share_map POST   /maps/:id/share(.:format)              {:controller=>"maps", :action=>"share"}
                         GET    /maps/:id/share(.:format)              {:controller=>"maps", :action=>"share"}
                    maps GET    /maps(.:format)                        {:controller=>"maps", :action=>"index"}
                         POST   /maps(.:format)                        {:controller=>"maps", :action=>"create"}
                 new_map GET    /maps/new(.:format)                    {:controller=>"maps", :action=>"new"}
                edit_map GET    /maps/:id/edit(.:format)               {:controller=>"maps", :action=>"edit"}
                     map GET    /maps/:id(.:format)                    {:controller=>"maps", :action=>"show"}
                         PUT    /maps/:id(.:format)                    {:controller=>"maps", :action=>"update"}
                         DELETE /maps/:id(.:format)                    {:controller=>"maps", :action=>"destroy"}

【问题讨论】:

  • 你也应该发布rake routes的输出

标签: ruby-on-rails-3 nested-resources


【解决方案1】:

必须是resources :versions。请注意您的案例中缺少的“s”。

【讨论】:

    【解决方案2】:

    除了@Femaref 的回答,你需要访问的url 是/maps/35/versions/2。如果你想要单数(singleton)资源,那么你会这样做:

    resources :maps do
      resource :version
    end
    

    然后点击 /maps/35/version(不需要 id)。如果每个地图都有多个版本,您可能不想这样做。

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多