我的路由怎么办?

时间:2013-08-20 02:27:50

标签: ruby-on-rails routes

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

2 个答案:

答案 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。