2013-08-20 47 views
0

我試圖使用自定義路線去/admin/home但它不斷給我的錯誤:使用= link_to 'Home', home_admins_path我的路由有什麼問題?

當我運行rake routesundefined local variable or method 'home_admins_path' for #<#<Class:0x007f8272855808>:0x007f8272b9f298>看來,路徑是有效的: home_admins_path GET /admins/home(.:format) admins#home

路線.RB

MyApp::Application.routes.draw do 
    devise_for :admins 

    get '/admins/home' => 'admins#home', as: :home_admins_path 

    resources :admins 

    root to: 'pages#home' 
end 

admins_controller.rb

class AdminsController < ApplicationController 
    load_and_authorize_resource 

    def home 
    render "admins/home.html.haml" 
    end 
end 
+0

我希望這個答案也會有幫助http://stackoverflow.com/questions/7053754/ruby-on-rails-routes/7054021#7054021 – rubish

回答

2

當使用as選項指定命名路徑時,「_path」被Rails附加到名稱。因此,對於路線:

get '/admins/home' => 'admins#home', as: :home_admins_path 

然後命名路由變爲home_admins_path_path

因此,要獲得home_admins_path命名的路線,你需要將其更改爲:

get '/admins/home' => 'admins#home', as: :home_admins 

另一種辦法是爲resources :admincollection想補充這條路線如下:

resources :admins do 
    collection do 
    get '/home', action: :home, as: :home 
    end 
end 

而且這也將給你一條命名路線home_admins_path

+0

嗯,這是有道理的。仍然有點新,所以我搞砸了基礎知識。像現在的魅力一樣工作,謝謝! –

0

您不必在「as」中指定home_admins_path。 _path由導軌自動添加,所以對於你的問題,你只需要編寫這樣

get '/admins/home' => 'admins#home', as: :home_admins 

將擴大由軌道home_admins_path或home_admins_url的路線。

+0

由於它的長度,此答案被標記爲低質量。雖然我同意,不幸的是這樣的答案是允許的。但是,除了其允許的性質之外,我敦促您對此進行擴展,並提供詳細的答案,而不僅僅是一行一行。 – jeremy