【问题标题】:Rails - From RESTFul resource to customized routesRails - 从 RESTFul 资源到自定义路由
【发布时间】:2012-02-08 04:07:47
【问题描述】:

这是一个我正在尝试解决的设计问题。我将解释我现在拥有什么,以及我想要拥有什么:

1.实际设计

我定义了一个resources :users,通过这样做,我在用户控制器中定义了不同的操作,例如新建、创建和更新。通过像 users/new 、 users/:id 等这样的 urls 可以按预期工作...... 现在我想更进一步,我希望能够做到以下几点……

2。我在找什么

我希望能够有这样的路线:

users/overview/profile - This should be equivalent to `users/:id` (show action) 
users/overview/network - This should be equivalent to users/:id/network (list of networks for that user)

3.我的想法

我的第一个想法是这样定义:

resource :users do
 namespace :overview do
  resource :networks
 end
end

但这适用于以下网址:users/:id/overview/networks,我不希望用户 ID 显示在网址中。所以我的问题是:

1 - 我如何处理 users/overview/networks 而不是 users/:id/overview/networks ,假设我可以从会话中获取用户 ID。

2 - 我怎样才能管理这样的 URL:users/overview/profile 实际上配置文件只是 users/:id 的 show 方法现在我已经在用户控制器中定义了所有操作并且一切正常(新、删除、创建、更新...)我只是不知道如何进入那个“命名空间”概述/配置文件

【问题讨论】:

    标签: ruby-on-rails namespaces routes


    【解决方案1】:

    我已经尝试过你尝试过的同样的事情,它只返回你想要的结果,不确定你的问题是什么。在此处发布 rake 路由结果。

    users_overview_networks POST        /users/overview/networks(.:format)         {:action=>"create", :controller=>"overview/networks"}
    new_users_overview_networks GET         /users/overview/networks/new(.:format)     {:action=>"new", :controller=>"overview/networks"}
    edit_users_overview_networks GET         /users/overview/networks/edit(.:format)    {:action=>"edit", :controller=>"overview/networks"}
    GET         /users/overview/networks(.:format)         {:action=>"show", :controller=>"overview/networks"}
    PUT         /users/overview/networks(.:format)         {:action=>"update", :controller=>"overview/networks"}
    DELETE      /users/overview/networks(.:format)         {:action=>"destroy", :controller=>"overview/networks"}
    users POST        /users(.:format)                           {:action=>"create", :controller=>"users"}
    new_users GET         /users/new(.:format)                       {:action=>"new", :controller=>"users"}
    edit_users GET         /users/edit(.:format)                      {:action=>"edit", :controller=>"users"}
    GET         /users(.:format)                           {:action=>"show", :controller=>"users"}
    PUT         /users(.:format)                           {:action=>"update", :controller=>"users"}
    DELETE      /users(.:format)                           {:action=>"destroy", :controller=>"users"}
    

    【讨论】:

    • 感谢您的回答,但是我的第二个问题呢?
    • 另外,请注意 /users/:user_id/overview/networks(.:format) - 我不希望 :user_id 出现...
    【解决方案2】:
      scope :path => 'users/overview' do
        match ':id/profile', :to => 'users#show'
        match ':id/network', :to => 'users#network'
      end 
    

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 2014-08-22
      • 2016-09-28
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2015-06-09
      • 2011-10-09
      • 2011-07-05
      相关资源
      最近更新 更多