从Rails URL路由中删除控制器名称

时间:2014-04-30 02:13:51

标签: ruby-on-rails routes

这是我的第一个Rails项目,我正在尝试慢慢把它们拼凑起来。

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我们通过在path方法中使用resources参数来实现这一目标:

#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

这将为您提供没有控制器名称的路由。您必须在路线末尾定义此内容(因此其他路径首先出现)

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

答案 2 :(得分:1)

听起来这是一个静态页面,所以你可以像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