首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Ruby on Rails 開發從頭來(三十三):命名慣例完整指南

     編輯:Java 相關知識

為何命名慣例至關重要?

Rails 的「慣例優於配置」核心哲學,極大程度依賴命名慣例自動推斷類別、表名、檔案路徑、關聯關係等。掌握慣例能讓你少寫大量配置程式碼,並與框架順暢協作。

核心命名規則

元素慣例範例
資料表小寫、底線分隔、複數orders, line_items, third_parties
模型類別駝峰式、單數Order, LineItem, ThirdParty
模型檔案小寫、底線分隔、單數order.rb, line_item.rb
控制器類別駝峰式、單數 + ControllerStoreController, Admin::ProductsController
控制器檔案小寫、底線分隔、單數 + _controller.rbstore_controller.rb, admin/products_controller.rb
視圖目錄app/views/控制器名(不含 Controller)app/views/store/, app/views/admin/products/
佈局檔案app/views/layouts/控制器名.rhtmlstore.rhtml, admin.rhtml
Helper 模組駝峰式 + HelperStoreHelper, Admin::ProductsHelper
Helper 檔案小寫、底線分隔 + _helper.rbstore_helper.rb, admin/products_helper.rb
Migration 檔案時間戳 + _描述.rb20240114120000_create_orders.rb

自動載入機制

Rails 依慣例將類別名轉換為檔案路徑並自動 require:

# 程式碼中首次引用 LineItem
LineItem.new  # 自動載入 app/models/line_item.rb

# 引用 Admin::ProductsController
# 自動載入 app/controllers/admin/products_controller.rb

原理:const_missing 回呼將常數名(LineItem)轉為底線命名(line_item),在載入路徑中尋找對應 .rb 檔案。

Session 存放模型類別的例外

將模型物件存入 Session 時,類別必須預先載入,否則反序列化失敗。在控制器宣告:

class StoreController < ApplicationController
  model :line_item  # 強制載入 LineItem 類別
end

控制器模組化(命名空間)

大型專案可將控制器歸類至模組,避免命名衝突:

# 請求 URL: /admin/books
# 對應控制器: app/controllers/admin/books_controller.rb
class Admin::BooksController < ApplicationController
end

# 請求 URL: /content/books
# 對應控制器: app/controllers/content/books_controller.rb
class Content::BooksController < ApplicationController
end

產生器指令:

ruby script/generate controller Admin::Books index show
ruby script/generate controller Content::Books index show

資料庫欄位命名

  • 外鍵:模型名_id(如 user_id, line_item_id)
  • 多型關聯:可多型名_type, 可多型名_id(如 commentable_type, commentable_id)
  • 計數器快取:關聯名_count(如 comments_count)
  • 主鍵:慣例為 id(可用 set_primary_key 覆寫)

測試檔案命名

測試類型目錄檔案命名
單元測試test/unit/model_name_test.rb
功能測試test/functional/controller_name_controller_test.rb
整合測試test/integration/feature_name_test.rb
Fixturestest/fixtures/table_name.yml
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved