我正在尝试使用自定义路线转到/admin/home
,但在使用undefined local variable or method 'home_admins_path' for #<#<Class:0x007f8272855808>:0x007f8272b9f298>
= link_to 'Home', home_admins_path
当我运行rake routes
时,路径显示有效:
home_admins_path GET /admins/home(.:format) admins#home
的routes.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 :(得分:2)
使用as
选项指定命名路径时,Rails会将“_path”附加到名称。所以对于你的路线:
get '/admins/home' => 'admins#home', as: :home_admins_path
然后命名的路线变为home_admins_path_path
。
因此,要获得home_admins_path
命名路由,您需要将其更改为:
get '/admins/home' => 'admins#home', as: :home_admins
另一种选择是在collection
中将此路线添加为resources :admin
,如下所示:
resources :admins do
collection do
get '/home', action: :home, as: :home
end
end
这也会给你一条命名路线home_admins_path
。
答案 1 :(得分:0)
您不必在“as”中指定home_admins_path。 _path由rails自动添加,因此对于您的问题,您只需要编写这样的路径
get '/admins/home' => 'admins#home', as: :home_admins
它将被rails扩展为home_admins_path或home_admins_url。