【问题标题】:What am I doing wrong with my routing?我的路由做错了什么?
【发布时间】:2013-08-21 23:22:50
【问题描述】:

我正在尝试使用自定义路由去/admin/home,但它一直给我错误:undefined local variable or method 'home_admins_path' for #<#<Class:0x007f8272855808>:0x007f8272b9f298> when using = 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

【问题讨论】:

标签: ruby-on-rails routes


【解决方案1】:

当您使用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 

另一种选择是将此路由添加为collectionresources :admin 中,如下所示:

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

这也会给你一个命名路由home_admins_path

【讨论】:

  • 啊是的,这是有道理的。对此仍然有点新,所以我搞砸了基础知识。现在像魅力一样工作,谢谢!
【解决方案2】:

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

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

它将被rails扩展为home_admins_path或home_admins_url。

【讨论】:

  • 此答案因其长度而被标记为低质量。虽然我同意,但不幸的是,这样的答案是允许的。但是,除了它们允许的性质之外,我敦促您对此进行扩展并提供详细的答案,而不仅仅是一条线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2014-05-22
  • 2015-10-18
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
相关资源
最近更新 更多