2013-08-20 44 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