0

我正在尝试使用自定义路线去,/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

路线.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
4

2 回答 2

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

于 2013-08-20T02:30:14.240 回答
0

您不必在“as”中指定 home_admins_path。_path 由 rails 自动添加,因此对于您的问题,您只需像这样编写路线

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

它将被 rails 扩展为 home_admins_path 或 home_admins_url。

于 2013-08-20T02:30:58.820 回答