了解rake路由输出

时间:2011-07-26 06:31:39

标签: ruby-on-rails

我对rake routes输出感到困惑。举个例子(修剪过):

profil GET    /profil/:id(.:format)     {:action=>"show", :controller=>"profil"}
       PUT    /profil/:id(.:format)     {:action=>"update", :controller=>"profil"}
 login GET    /login(.:format)      {:action=>"new", :controller=>"sessions"}
       POST   /login(.:format)      {:action=>"create", :controller=>"sessions"}
logout GET    /logout(.:format)     {:action=>"destroy", :controller=>"sessions"}

我一直在想:

  • 第2行:可以使用profil_path PUT 方法访问路线。
  • 第4行:可以使用login_path POST 方法访问路线。

结论:第一列为空(第2行和第4行)的行将跟随其上方的行。

但是,我一直在尝试向网址添加参数。所以,我在routes.rb

中添加了这些代码
  namespace :admin do
    resources :pengguna_bulk, :only => [:new, :create]
    resources :pengguna do
      collection do
        get 'index/:page', :action => :index
      end
    end
  end

rake routes输出(修剪):

admin_pengguna_bulk_index POST   /admin/pengguna_bulk(.:format)        {:action=>"create", :controller=>"admin/pengguna_bulk"}
  new_admin_pengguna_bulk GET    /admin/pengguna_bulk/new(.:format)    {:action=>"new", :controller=>"admin/pengguna_bulk"}
                          GET    /admin/pengguna/index/:page(.:format) {:action=>"index", :controller=>"admin/pengguna"}
     admin_pengguna_index GET    /admin/pengguna(.:format)             {:action=>"index", :controller=>"admin/pengguna"}
                          POST   /admin/pengguna(.:format)             {:action=>"create", :controller=>"admin/pengguna"}
       new_admin_pengguna GET    /admin/pengguna/new(.:format)         {:action=>"new", :controller=>"admin/pengguna"}
      edit_admin_pengguna GET    /admin/pengguna/:id/edit(.:format)    {:action=>"edit", :controller=>"admin/pengguna"}
           admin_pengguna GET    /admin/pengguna/:id(.:format)         {:action=>"show", :controller=>"admin/pengguna"}
                          PUT    /admin/pengguna/:id(.:format)         {:action=>"update", :controller=>"admin/pengguna"}
                          DELETE /admin/pengguna/:id(.:format)         {:action=>"destroy", :controller=>"admin/pengguna"}

我的问题是,为什么第3条路线看起来像是在第二条路线下?它是空的,因为Rails不知道要命名它,我必须使用get 'index/:page', :action => :index, :as => :page来命名它吗?

那么,这意味着,第一列空白的路线并不总是遵循上述路径?

1 个答案:

答案 0 :(得分:1)

  

我一直在想:

     
      
  • 第2行:可以使用带有PUT方法的profil_path访问路径。
  •   
  • 第4行:可以使用带POST方法的login_path访问路径。
  •   
     

结论:第一列为空(第2行和第4行)的行   按照上面的那个。

除结论外,一切都是正确的。 profil_path扩展为/profil/:id(.:format)。如果使用方法GET调用它,它将响应您的第一条路线,如果使用方法PUT调用它,则它会响应您的第二条路线。

但同样不适用于第二组路线。您没有/admin/pengguna/index/:page(.:format)的任何命名助手。如果需要命名助手,则应定义路径,如:

get 'index/:page', :action => :index, :as => :what_ever_named_helper_you_want