【问题标题】:Removing controller name from Rails URL route从 Rails URL 路由中删除控制器名称
【发布时间】:2014-04-30 02:13:50
【问题描述】:

这是我的第一个 Rails 项目,我正在尝试慢慢拼凑。

当我尝试查看使用rails g controller <controller> <page> 生成的页面时,我发现自己要去0.0.0.0:3000/controller/page.html,如何配置它以便我的全局路由文件允许通过页面名称查看页面,而不是控制器/页面,如果不存在这种方式,那么我该如何将controller/page.html 路由到/page.html

我环顾四周,并没有真正找到任何解释,也许我在寻找错误的地方?

【问题讨论】:

    标签: ruby-on-rails routes


    【解决方案1】:

    config/routes.rb:

    get '/page' => 'controller#action'
    

    如果您的控制器是:

    class UsersController < ApplicationController
      def something
      end
    end
    

    那么config/routes.rb 将是:

    get '/page' => 'users#something'
    

    对于静态页面,您可能希望使用public 文件夹,但您放置在那里的所有内容都可以直接访问,例如public/qqqqqq.html 将在localhost:3000/qqqqqq.html 中访问

    【讨论】:

    • 谢谢队友 :) 非常感谢,所以口中的“某事”是#之后的部分(即'#'?
    【解决方案2】:

    我们刚刚通过在resources 方法中使用path 参数实现了这一点:

    #config/routes.rb
    resources :controller, path: ""
    

    具体来说,你会想做这样的事情:

    #config/routes.rb
    resources :static_pages, path: "", only: [:index]
       get :page
       get :other_page
    end
    
    #app/controllers/your_controller.rb
    def page
    end
    
    def other_page
    end
    

    这将为您提供没有控制器名称的路由。你必须在你的路线结束时定义它(所以其他的路径是第一位的)

    显然这将构成更广泛的路由文件的一部分,所以如果它不能直接工作,我们可以重构!

    【讨论】:

      【解决方案3】:

      听起来这是一个静态页面,所以你可以按照 juanpastas 说的做,或者另一种选择是在你的 app/views 目录下创建一个文件夹来保存这些页面。也许像 app/views/static_pages/the_page.html.erb

      然后在您的config/routes.rb 中添加:

      match '/your_page_name', to: 'static_pages#the_page', via: :get

      【讨论】:

      • 它不是一个静态页面,我将它设置为对我设置的 Web 服务进行 HTTP 请求,我不需要数据库,但我确实需要一个控制器。不过谢谢你的建议..
      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2013-08-15
      相关资源
      最近更新 更多