---
title: "ruby on rails | 今日所學 | OOZOU"
description: "來自 OOZOU 團隊的簡短實用 ruby on rails 筆記。"
canonical: https://oozou.com/zh-Hant/til-topics/ruby-on-rails
locale: zh-Hant
---

# ruby on rails | 今日所學

> 來自 OOZOU 團隊的簡短實用 ruby on rails 筆記。

- [用 Pundit Policy 管理 permitted parameters、預設值與各 action 的參數](https://oozou.com/zh-Hant/til/use-pundit-policies-to-manage-permitted-parameters-defaults-and-per-action-188) ([markdown](https://oozou.com/zh-Hant/til/use-pundit-policies-to-manage-permitted-parameters-defaults-and-per-action-188.md)) (2022-02-10): 要管理 permitted params，你可以在你的 policy 中加入 permitted\attributes 和 permitted\attributes\for\#{action}，例如
- [在 Turbo 中用 `requestSubmit` 送出表單](https://oozou.com/zh-Hant/til/use-requestsubmit-for-form-submits-with-turbo-155) ([markdown](https://oozou.com/zh-Hant/til/use-requestsubmit-for-form-submits-with-turbo-155.md)) (2022-01-31): Turbo 會監聽 form 上的 submit 事件。因此，用 JS 送出表單時，請一律使用 requestSubmit。
- [在 GitHub Actions 中讓 Rubocop 與 ESLint 忽略 bundled gems](https://oozou.com/zh-Hant/til/ignore-bundled-gems-for-rubocop-and-eslint-in-github-actions-154) ([markdown](https://oozou.com/zh-Hant/til/ignore-bundled-gems-for-rubocop-and-eslint-in-github-actions-154.md)) (2022-01-19): Rails 專案在 GitHub actions 中通常會把 gems 安裝到 vendor 目錄，方便在後續執行時使用快取。
- [Rails 6、Ruby 3、Bootstrap 5 與 Hotwire](https://oozou.com/zh-Hant/til/rails-6-ruby-3-bootstrap-5-and-hotwire-115) ([markdown](https://oozou.com/zh-Hant/til/rails-6-ruby-3-bootstrap-5-and-hotwire-115.md)) (2021-04-18): 以 Hotwire 延伸 Bootrails 的部落格文章：   所有最新潮的東西（截至我寫這篇 TIL 的時候）：
- [Rails Cache-Control](https://oozou.com/zh-Hant/til/rails-cache-control-77) ([markdown](https://oozou.com/zh-Hant/til/rails-cache-control-77.md)) (2020-10-27): 若要在 Heroku 上啟用靜態資產的 cache-control 標頭設定並使用 CDN：
- [修正 Heroku rails console 的輸入問題](https://oozou.com/zh-Hant/til/fix-input-on-heroku-s-rails-console-73) ([markdown](https://oozou.com/zh-Hant/til/fix-input-on-heroku-s-rails-console-73.md)) (2020-10-14): 如果你在 Heroku（或其他地方）的 rails console 貼上很多行內容，可能會遇到各行「互相滲透」擠在一起的問題。
- [在 Rails 中為 DOM 產生唯一 ID](https://oozou.com/zh-Hant/til/unique-id-for-dom-in-rails-75) ([markdown](https://oozou.com/zh-Hant/til/unique-id-for-dom-in-rails-75.md)) (2020-10-14): Rails 有許多很棒的 view helper，其中之一就是 dom\id:*
- [為 Rails 5 attributes API 新增自訂型別](https://oozou.com/zh-Hant/til/add-new-types-to-rails-5-attributes-api-13) ([markdown](https://oozou.com/zh-Hant/til/add-new-types-to-rails-5-attributes-api-13.md)) (2020-10-13): Rails 5 的 attributes API 讓我們可以非常輕鬆地建立 form object。
- [不透過 HTTP 將檔案附加到 ActiveStorage](https://oozou.com/zh-Hant/til/attaching-file-to-activestorage-without-http-19) ([markdown](https://oozou.com/zh-Hant/til/attaching-file-to-activestorage-without-http-19.md)) (2020-10-13): 如果你想附加一個在磁碟上產生的檔案，或是從使用者提交的 URL 下載下來的檔案，可以這樣做。
- [從 Enumerable 建立 Hash (Rails 6.0)](https://oozou.com/zh-Hant/til/create-a-hash-from-an-enumerable-rails-6-0-6) ([markdown](https://oozou.com/zh-Hant/til/create-a-hash-from-an-enumerable-rails-6-0-6.md)) (2020-10-13): 新方法讓你可以從 Enumerable 建立 Hash：
- [撰寫具冪等性的 migration](https://oozou.com/zh-Hant/til/create-idempotent-migrations-28) ([markdown](https://oozou.com/zh-Hant/til/create-idempotent-migrations-28.md)) (2020-10-13): 當你要撰寫破壞性的 migration 時，如果要移除資料表，請使用 if\exists: true；如果要新增或移除欄位，請先檢查資料表是否存在…
- [如何在你的專案中找出 god objects（Rails）](https://oozou.com/zh-Hant/til/how-to-find-god-objects-in-your-project-rails-40) ([markdown](https://oozou.com/zh-Hant/til/how-to-find-god-objects-in-your-project-rails-40.md)) (2020-10-13): 移到專案根目錄，cd 進 app/models（當然是透過 CLI），接著執行 wc -lw \ | sort -u*
- [可送出到另一個 action 的 HTML 表單](https://oozou.com/zh-Hant/til/html-forms-that-submit-to-another-action-10) ([markdown](https://oozou.com/zh-Hant/til/html-forms-that-submit-to-another-action-10.md)) (2020-10-13): 我很早就知道可以透過 submit 按鈕送出值，藉此追蹤表單是由哪個按鈕送出的，例如
- [想覆寫先前設定的排序時](https://oozou.com/zh-Hant/til/if-you-want-to-override-previously-set-order-25) ([markdown](https://oozou.com/zh-Hant/til/if-you-want-to-override-previously-set-order-25.md)) (2020-10-13): 如果你想覆寫先前設定的排序（即使是透過 default\_scope 設定的），請改用 reorder()。
- [限制數量的 has_many 關聯](https://oozou.com/zh-Hant/til/limited-has_many-associations-31) ([markdown](https://oozou.com/zh-Hant/til/limited-has_many-associations-31.md)) (2020-10-13): 限制數量的 has_many 關聯
- [列出你的 model 名稱](https://oozou.com/zh-Hant/til/list-your-model-names-58) ([markdown](https://oozou.com/zh-Hant/til/list-your-model-names-58.md)) (2020-10-13): 注意：RUBYOPT=-W0 可以在執行 rails 指令時避免冗長輸出，藉此抑制警告訊息。
- [Postgres 函式與 Non-sargable 查詢](https://oozou.com/zh-Hant/til/postgres-functions-non-sargable-queries-48) ([markdown](https://oozou.com/zh-Hant/til/postgres-functions-non-sargable-queries-48.md)) (2020-10-13): 在 where 子句中使用 postgres 函式可能會讓查詢變成 non-sargable。
- [PostgreSQL UPDATE Join ](https://oozou.com/zh-Hant/til/postgresql-update-join-64) ([markdown](https://oozou.com/zh-Hant/til/postgresql-update-join-64.md)) (2020-10-13): 這個查詢示範如何使用 PostgreSQL 的 UPDATE join 語法，根據另一張資料表的值來更新某張資料表的資料。例如；
- [Rails 中的 scope or scope](https://oozou.com/zh-Hant/til/scope-or-scope-in-rails-11) ([markdown](https://oozou.com/zh-Hant/til/scope-or-scope-in-rails-11.md)) (2020-10-13): scope :human, -> { user.or(author) } scope :terminator, -> { admin.or(robot) } `
- [在你的 Rails app 中顯示 TODO 和其他註記](https://oozou.com/zh-Hant/til/show-todo-and-other-notes-in-your-rails-app-7) ([markdown](https://oozou.com/zh-Hant/til/show-todo-and-other-notes-in-your-rails-app-7.md)) (2020-10-13): 你知道可以用 rails notes 顯示 rails app 中所有的 TODO/OPTIMIZE/FIXME 嗎？
- [在 rails log 加上有用的標籤資訊](https://oozou.com/zh-Hant/til/tag-rails-logs-with-useful-information-32) ([markdown](https://oozou.com/zh-Hant/til/tag-rails-logs-with-useful-information-32.md)) (2020-10-13): 剛學到 rails 的 tagged logging。你知道可以用下面的方式為 log 加上標籤嗎
- [在 collection JSON schema 中使用 minItems/maxItems](https://oozou.com/zh-Hant/til/use-minitems-maxitems-in-collection-json-schemas-1) ([markdown](https://oozou.com/zh-Hant/til/use-minitems-maxitems-in-collection-json-schemas-1.md)) (2020-10-13): 要讓你的 collection JSON schema 更可靠，請使用 minItems 和 maxItems，這樣你才能信任你的 API。

All notes: [今日所學](https://oozou.com/zh-Hant/til) ([markdown](https://oozou.com/zh-Hant/til.md)).

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/zh-Hant/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
