Rails路由并排除默认路由

时间:2014-06-13 09:11:37

标签: ruby-on-rails routes

我有一个家庭控制器,我计划只用于诸如aboutus,contactus或登陆页等页面。在路由文件中包含这个的最佳方法是什么我根本没有得到默认路由但是可以从网站的根目录中以/ [action]的形式访问每个操作。

例如:

xyz.com/aboutus should take me to home#aboutus
xyz.com/contactus should take me to home#contactus

2 个答案:

答案 0 :(得分:3)

#config/routes.rb
resources :home, path: "", only: [] do
   collection do
      get :aboutus
      get :contactus
   end
end
  

通过@Sanket

删除了循环

这将为您的所有网页创建domain.com/aboutus

-

<强> DRY

虽然这是你想要的,但让它运作起来的干扰方法是:

#config/routes.rb
resources :home, path: "", only: :show #-> domain.com/:id

这意味着您可以使用friendly_id之类的宝石为您的页面创建一系列slug,如下所示:

#app/models/page.rb
class Page < ActiveRecord::Base
    extend FriendlyId
    friendly_id :title, use: [:slugged, :finders]

    #fields
    id | slug | title | body | created_at | updated_at
end

#app/controllers/home_controller.rb
def show
   @page = Page.find params[:id]
end

如果您只想渲染没有模型的页面:

#app/controllers/home_controller.rb
def show
   render "pages##{params[:id]}"
end

这将允许您以最干的方式使用domain.com/home/aboutus之类的

-

<强>买者

一个很大的警告是,如果您要使用app-wide slugs,则需要将它们放在routes.rb文件的底部(这样它们就不会干扰其他路线)< / p>

答案 1 :(得分:1)

你可以使用https://github.com/thoughtbot/high_voltage作为静态页面的好宝石。