【问题标题】:Setting up static routes in Rails在 Rails 中设置静态路由
【发布时间】:2014-09-28 15:07:46
【问题描述】:

需要一些 Rails 帮助(使用 rails 4.0.8 和 ruby​​ 2.0.0)...

我正在尝试重构我的路线,而不是...

App::Application.routes.draw.do
   get "static_pages/home"
   get "static_pages/help"
   get "static_pages/about"
   get "static_pages/contact"
end

.. 在我的路线中,我将其设置为....

App::Application.routes.draw.do
   root 'static_pages#home'
   match '/help', to: 'static_pages#help', via: 'get'
   match '/about', to: 'static_pages#about', via: 'get'
   match '/contact', to: 'static_pages#contact', via: 'get'
end

...但是当我这样做时,我认为“match '/about'”应该会自动创建命名路由,以便在看起来像...的控制器和视图中使用。

about_path -> '/about'
about_url -> 'http://localhost:3000/about'

...但在我的控制器中并没有这样做。所以我想,“好吧,我会手动把它们放进去”,所以我制作了 app/controllers/static_pages_controller.rb...

class StaticPagesController < ApplicationController
   def home
      root_path -> '/'
      root_url -> 'http://localhost:3000/'
   end

   def help
      help_path -> '/help'
      help_url -> 'http://localhost:3000/help'
   end

   def about
      about_path -> '/about'
      about_url -> 'http://localhost:3000/about'
   end

   def contact
      contact_path -> '/contact'
      contact_url -> 'http://localhost:3000/contact'
   end
end

...它什么也没做。所以现在当我尝试转到主页时,例如,我收到路由错误 No route matches [GET] "/static_pages/home"

我是 Rails 开发的新手,所以我确信我在这里缺少一些相当明显的东西。任何人都可以阐明发生了什么吗?非常感谢。

用答案编辑 1

BroiSatse 和 Ako 给出了答案……

在路由配置中我错过了 as: 键,因此将我的代码更新为

App::Application.routes.draw.do
  root 'static_pages#home'
  match '/help', to: 'static_pages#help', via: 'get', as: :help
  match '/about', to: 'static_pages#about', via: 'get', as: :about
  match '/contact', to: 'static_pages#contact', via: 'get', as: :contact
end

成功了。谢谢!

【问题讨论】:

  • 这不是动态路由。这些是静态路由

标签: ruby-on-rails ruby dynamic routes match


【解决方案1】:

您所缺少的只是as 键:

App::Application.routes.draw.do
  root 'static_pages#home'
  match '/help', to: 'static_pages#help', via: 'get', as: :help
  match '/about', to: 'static_pages#about', via: 'get', as: :about
  match '/contact', to: 'static_pages#contact', via: 'get', as: :contact
end

添加为键将使路由命名并创建所需的 url_helpers。

编辑:

但是,你可以做得更好:

App::Application.routes.draw.do
  root 'static_pages#home'

  scope controller: :static_pages do
    get :help
    get :about
    get :contact
  end
end

【讨论】:

    【解决方案2】:

    要定义您的命名路线,您可以这样做:

    match '/about', to: 'static_pages#about', via: 'get', as: :about
    

    这会给你about_path

    您可以了解更多关于命名路由here的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多