---
title: "ruby on rails | 今日所学 | OOZOU"
description: "来自 OOZOU 团队的简短实用 ruby on rails 笔记。"
canonical: https://oozou.com/zh-Hans/til-topics/ruby-on-rails
locale: zh-Hans
---

# ruby on rails | 今日所学

> 来自 OOZOU 团队的简短实用 ruby on rails 笔记。

- [用 Pundit Policy 管理 permitted parameters、默认值与各 action 的参数](https://oozou.com/zh-Hans/til/use-pundit-policies-to-manage-permitted-parameters-defaults-and-per-action-188) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/use-requestsubmit-for-form-submits-with-turbo-155) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/ignore-bundled-gems-for-rubocop-and-eslint-in-github-actions-154) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/rails-6-ruby-3-bootstrap-5-and-hotwire-115) ([markdown](https://oozou.com/zh-Hans/til/rails-6-ruby-3-bootstrap-5-and-hotwire-115.md)) (2021-04-18): 以 Hotwire 扩展 Bootrails 的博客文章：   所有最新潮的东西（截至我写这篇 TIL 的时候）：
- [Rails Cache-Control](https://oozou.com/zh-Hans/til/rails-cache-control-77) ([markdown](https://oozou.com/zh-Hans/til/rails-cache-control-77.md)) (2020-10-27): 若要在 Heroku 上启用静态资源的 cache-control 响应头设置并使用 CDN：
- [修正 Heroku rails console 的输入问题](https://oozou.com/zh-Hans/til/fix-input-on-heroku-s-rails-console-73) ([markdown](https://oozou.com/zh-Hans/til/fix-input-on-heroku-s-rails-console-73.md)) (2020-10-14): 如果你在 Heroku（或其他地方）的 rails console 里粘贴多行内容，可能会遇到各行“互相渗透”挤成一团的问题。
- [在 Rails 中为 DOM 生成唯一 ID](https://oozou.com/zh-Hans/til/unique-id-for-dom-in-rails-75) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/add-new-types-to-rails-5-attributes-api-13) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/attaching-file-to-activestorage-without-http-19) ([markdown](https://oozou.com/zh-Hans/til/attaching-file-to-activestorage-without-http-19.md)) (2020-10-13): 如果你想附加一个在磁盘上生成的文件，或者从用户提交的 URL 下载下来的文件，可以这样做。
- [从 Enumerable 创建 Hash (Rails 6.0)](https://oozou.com/zh-Hans/til/create-a-hash-from-an-enumerable-rails-6-0-6) ([markdown](https://oozou.com/zh-Hans/til/create-a-hash-from-an-enumerable-rails-6-0-6.md)) (2020-10-13): 新方法让你可以从 Enumerable 创建 Hash：
- [编写幂等的 migration](https://oozou.com/zh-Hans/til/create-idempotent-migrations-28) ([markdown](https://oozou.com/zh-Hans/til/create-idempotent-migrations-28.md)) (2020-10-13): 当你要写破坏性的 migration 时，如果要删除数据表，请加上 if\exists: true；如果要添加或删除字段，请先检查数据表是否存在…
- [如何在你的项目中找出 god objects（Rails）](https://oozou.com/zh-Hans/til/how-to-find-god-objects-in-your-project-rails-40) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/html-forms-that-submit-to-another-action-10) ([markdown](https://oozou.com/zh-Hans/til/html-forms-that-submit-to-another-action-10.md)) (2020-10-13): 我很早就知道可以通过 submit 按钮提交一个值，借此判断表单是由哪个按钮提交的，例如
- [想覆盖之前设置的排序时](https://oozou.com/zh-Hans/til/if-you-want-to-override-previously-set-order-25) ([markdown](https://oozou.com/zh-Hans/til/if-you-want-to-override-previously-set-order-25.md)) (2020-10-13): 如果你想覆盖之前设置的排序（哪怕是通过 default\_scope 设置的），请改用 reorder()。
- [限制数量的 has_many 关联](https://oozou.com/zh-Hans/til/limited-has_many-associations-31) ([markdown](https://oozou.com/zh-Hans/til/limited-has_many-associations-31.md)) (2020-10-13): 限制数量的 has_many 关联
- [列出你的 model 名称](https://oozou.com/zh-Hans/til/list-your-model-names-58) ([markdown](https://oozou.com/zh-Hans/til/list-your-model-names-58.md)) (2020-10-13): 注意：RUBYOPT=-W0 可以在运行 rails 命令时抑制警告信息，避免冗长的输出。
- [Postgres 函数与 Non-sargable 查询](https://oozou.com/zh-Hans/til/postgres-functions-non-sargable-queries-48) ([markdown](https://oozou.com/zh-Hans/til/postgres-functions-non-sargable-queries-48.md)) (2020-10-13): 在 where 子句中使用 postgres 函数可能会让查询变成 non-sargable。
- [PostgreSQL UPDATE Join ](https://oozou.com/zh-Hans/til/postgresql-update-join-64) ([markdown](https://oozou.com/zh-Hans/til/postgresql-update-join-64.md)) (2020-10-13): 这个查询演示了如何使用 PostgreSQL 的 UPDATE join 语法，根据另一张数据表的值来更新某张数据表的数据。例如；
- [Rails 中的 scope or scope](https://oozou.com/zh-Hans/til/scope-or-scope-in-rails-11) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/show-todo-and-other-notes-in-your-rails-app-7) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/tag-rails-logs-with-useful-information-32) ([markdown](https://oozou.com/zh-Hans/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-Hans/til/use-minitems-maxitems-in-collection-json-schemas-1) ([markdown](https://oozou.com/zh-Hans/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-Hans/til) ([markdown](https://oozou.com/zh-Hans/til.md)).

---

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

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