惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
Blog — PlanetScale
Blog — PlanetScale
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
D
DataBreaches.Net
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Fortinet All Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
Recent Announcements
Recent Announcements
Jina AI
Jina AI
G
Google Developers Blog
腾讯CDC
博客园_首页
博客园 - 【当耐特】

Nic Lin's Blog

謝明真 - 高效領導力的課後筆記 NFT 開發實戰!基礎智能合約入門 (3) NFT 開發實戰!基礎智能合約入門 (2) NFT 開發實戰!基礎智能合約入門 (1) 如何自我檢測 log4j CVE 漏洞 Rails 如何在資料寫入時記錄來源 IP 位置 如何經營工程師 Youtube 頻道 - Part 8 營收篇 如何經營工程師 Youtube 頻道 - Part 7 酸民文化篇 如何經營工程師 Youtube 頻道 - Part 5 設備器材篇 如何經營工程師 Youtube 頻道 - Part 4 後製剪輯篇 如何經營工程師 Youtube 頻道 - Part 3 文案企劃篇 如何經營工程師 Youtube 頻道 - Part 2 設備器材篇 如何經營工程師 Youtube 頻道 - Part 1 制訂頻道方向篇 如何經營工程師 Youtube 頻道 - Part 0 Rails 中避免 race condition 的最佳實踐(二) Rails 中避免 race condition 的最佳實踐(一) 10 分鐘整合 google sheet 做自動化開發功能週報 經營 Side Project 300 天所帶來的收穫及挑戰 我的 Youtube 影片製作流程 API 設計時必須注意的 HTTP header 底線問題 如何提升你的程式可讀性之實務技巧(三) 如何提升你的程式可讀性之實務技巧(二) 如何提升你的程式可讀性之實務技巧(一) Ruby 中使用 freeze 優化效能的時機 避免 React 中的 useEffect 無限 render 在 Rails 內輕量使用 Vue Component 的最佳實踐 如何在區域網路用 Docker 架設有 SSL 的 Gitlab 從被問到問人,那些我常問的面試問題 [Rails] 如何漂亮寫出可維護的 query (Maintainable Rails Query) 在已知長度情況下優化 slice 的性能
拆分你的 routes.rb,使他更好維護及整理
Nic Lin · 2017-07-24 · via Nic Lin's Blog

How to split routes.rb into smaller parts?

在 Rails 開發上, route(路由)就像總機小姐,可以清楚的幫你承接到業務承辦人員, Routing 就是替你的頁面指路,經過 Controller Action 後呈現你想要的頁面。

在 Ruby on Rails 開發應用上, config/routes 這隻檔案會隨著程式碼日積月累的成長而變得更肥大,這會使開發人員更難以維護,也會在搜尋具體路徑變得越來越困難,當使用者頁面、登陸頁、後台、API…等路由全都攪和在一起,那是非常惱人的事情。

參考如下:

ActionController::Routing::Routes.draw do
  root to: "home#index"
  get "/about
  get "/login" => "application#login"

  namespace :api do
    #nested resources
  end

  namespace :admin do
    #nested resources
  end

  namespace :messages do
    #nested resources
  end

  namespace :orders do
    #nested resources
  end
end

Rails 3

如果你的應用程序在 Rails 版本 3,可以嘗試以下的解法

config.paths["config/routes"] += Dir[Rails.root.join('config/routes/*.rb’)]

想控制的更清楚一些,可以指定引入的檔名

config.paths["config/routes"] = %w(
      config/routes/messages.rb
      config/routes/orders.rb
      config/routes/admin.rb
      config/routes/api.rb
      config/routes.rb
    ).map { |relative_path| Rails.root.join(relative_path) }

Raisl 4

不過在 Rails 4 之後,如果你利用了上述的寫法嘗試解決,會拋出異常(throw an exception),因為在 Rails 4 之後的版本裡, Rails::Engine 並不存在這個 key ['config/routes']

那麼最佳的解法,是可以共存 Rails 3 & 4 & 5的

看以下範例 code

YourApplication::Application.routes.draw do

def draw(routes_name)
    instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
end

  draw :messages
  draw :orders
  draw :api
  draw :admin

  root to: "home#index"
  get "/about
  get "/login" => "application#login" 

end

這樣你就可以在 config/routes/api.rb 只放關於 api 的 routes

  namespace :api do
    #nested resources
  end

可以只在 config/routes/admin.rb 只放關於後台權限相關的 routes

  namespace :admin do
    #nested resources
  end
project
└─── config
│   │   routes.rb
│   │
│   └─── routes
│       │   api.rb
│       │   admin.rb
│       │   ...

是不是看起來好多了?

將同一種類型的路由整理起像 component 來使用,除了好維護,也容易進行找查相關路徑。

其原理是 ActionDispatch::Routing 允許我們在裡面加入一個新的方法來使用,這有助於我們加載相關路徑。

參考資源: How to split routes.rb into smaller parts?