Rails 路线并排除默认路线

Qai*_*ali 0 routes ruby-on-rails

我有一个家庭控制器,我打算仅将其用于“关于我们”、“联系我们”或“登陆页面”等页面。将其包含在路线文件中的最佳方法是什么,我根本没有获得默认路线,但确实获得了从站点根目录以 /[action] 的形式访问每个操作。

例如:

xyz.com/aboutus should take me to home#aboutus
xyz.com/contactus should take me to home#contactus
Run Code Online (Sandbox Code Playgroud)

ETC。

Ric*_*eck 5

#config/routes.rb
resources :home, path: "", only: [] do
   collection do
      get :aboutus
      get :contactus
   end
end
Run Code Online (Sandbox Code Playgroud)

循环被删除@Sanket

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

--

干燥

尽管这是您想要的,但让它发挥作用的更干燥的方法是执行以下操作:

#config/routes.rb
resources :home, path: "", only: :show #-> domain.com/:id
Run Code Online (Sandbox Code Playgroud)

这意味着您可以使用 gem 为friendly_id您的页面创建一系列 slugs,如下所示:

#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
Run Code Online (Sandbox Code Playgroud)

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

#app/controllers/home_controller.rb
def show
   render "pages##{params[:id]}"
end
Run Code Online (Sandbox Code Playgroud)

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

--

警告

一个重要的警告是,如果您要使用应用程序范围的 slugs,您需要将它们放在routes.rb文件的底部(这样它们就不会干扰其他路由)