用 Pundit Policy 管理 permitted parameters、預設值與各 action 的參數
要管理 permitted params,你可以在你的 policy 中加入 permitted\attributes 和 permitted\attributes\for\#{action},例如
在 Turbo 中用 `requestSubmit` 送出表單
Turbo 會監聽 form 上的 submit 事件。因此,用 JS 送出表單時,請一律使用 requestSubmit。
在 GitHub Actions 中讓 Rubocop 與 ESLint 忽略 bundled gems
Rails 專案在 GitHub actions 中通常會把 gems 安裝到 vendor 目錄,方便在後續執行時使用快取。
Rails 6、Ruby 3、Bootstrap 5 與 Hotwire
以 Hotwire 延伸 Bootrails 的部落格文章: 所有最新潮的東西(截至我寫這篇 TIL 的時候):
Rails Cache-Control
若要在 Heroku 上啟用靜態資產的 cache-control 標頭設定並使用 CDN:
修正 Heroku rails console 的輸入問題
如果你在 Heroku(或其他地方)的 rails console 貼上很多行內容,可能會遇到各行「互相滲透」擠在一起的問題。
在 Rails 中為 DOM 產生唯一 ID
Rails 有許多很棒的 view helper,其中之一就是 dom\id:*
為 Rails 5 attributes API 新增自訂型別
Rails 5 的 attributes API 讓我們可以非常輕鬆地建立 form object。
不透過 HTTP 將檔案附加到 ActiveStorage
如果你想附加一個在磁碟上產生的檔案,或是從使用者提交的 URL 下載下來的檔案,可以這樣做。
從 Enumerable 建立 Hash (Rails 6.0)
新方法讓你可以從 Enumerable 建立 Hash:
撰寫具冪等性的 migration
當你要撰寫破壞性的 migration 時,如果要移除資料表,請使用 if\exists: true;如果要新增或移除欄位,請先檢查資料表是否存在…
如何在你的專案中找出 god objects(Rails)
移到專案根目錄,cd 進 app/models(當然是透過 CLI),接著執行 wc -lw \ | sort -u*
可送出到另一個 action 的 HTML 表單
我很早就知道可以透過 submit 按鈕送出值,藉此追蹤表單是由哪個按鈕送出的,例如
想覆寫先前設定的排序時
如果你想覆寫先前設定的排序(即使是透過 default\_scope 設定的),請改用 reorder()。
限制數量的 has_many 關聯
限制數量的 has_many 關聯
列出你的 model 名稱
注意:RUBYOPT=-W0 可以在執行 rails 指令時避免冗長輸出,藉此抑制警告訊息。
Postgres 函式與 Non-sargable 查詢
在 where 子句中使用 postgres 函式可能會讓查詢變成 non-sargable。
PostgreSQL UPDATE Join
這個查詢示範如何使用 PostgreSQL 的 UPDATE join 語法,根據另一張資料表的值來更新某張資料表的資料。例如;
Rails 中的 scope or scope
scope :human, -> { user.or(author) } scope :terminator, -> { admin.or(robot) } `
在你的 Rails app 中顯示 TODO 和其他註記
你知道可以用 rails notes 顯示 rails app 中所有的 TODO/OPTIMIZE/FIXME 嗎?
在 rails log 加上有用的標籤資訊
剛學到 rails 的 tagged logging。你知道可以用下面的方式為 log 加上標籤嗎
在 collection JSON schema 中使用 minItems/maxItems
要讓你的 collection JSON schema 更可靠,請使用 minItems 和 maxItems,這樣你才能信任你的 API。