用 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。