Punditポリシーで許可パラメータをデフォルトとアクション別に管理する
許可パラメータを管理するには、ポリシーに permitted\attributes と permitted\attributes\for\#{action} を追加します。例:
Turboでのフォーム送信には `requestSubmit` を使う
Turboはformのsubmitイベントをリッスンします。そのため、JSでフォームを送信するときは必ず requestSubmit を使いましょう。
GitHub Actions で Rubocop と ESLint にバンドルされた gem を無視させる
Rails プロジェクトでは、GitHub Actions で gem を vendor ディレクトリにインストールして、以降の実行でキャッシュできるようにすることがよくあります。
Rails 6、Ruby 3、Bootstrap 5 と Hotwire
Bootrails のブログ記事を Hotwire で拡張します: この TIL を書いている時点での最新のあれこれ:
Rails の Cache-Control
Heroku で静的アセットの cache-control ヘッダーを設定し、CDN を使えるようにするには:
Heroku の rails console での入力を修正する
Heroku (やその他の環境) の rails console にたくさんの行を貼り付けると、行同士が「にじんで」混ざってしまう問題が起きることがあります。
RailsでDOM用の一意なIDを生成する
Railsには優れたビューヘルパーが数多くあり、そのひとつが dom\id:* です
Rails 5 の attributes API に新しい型を追加する
Rails 5 の attributes API を使うと、フォームオブジェクトをとても簡単に作れます。
HTTP を介さずに ActiveStorage にファイルを添付する
ディスク上に生成したファイルや、ユーザーが送信した URL からダウンロードしたファイルを添付したい場合は、次のようにできます。
Enumerable から Hash を作成する (Rails 6.0)
Enumerable から Hash を作成できる新しいメソッドです:
冪等なマイグレーションを作成する
破壊的なマイグレーションを書くときは、テーブルを削除する場合には if\exists: true を使い、カラムを追加または削除する場合にはテーブルの存在を確認してください…
プロジェクト内の god object を見つける方法(Rails)
プロジェクトルートに移動し、app/models へ cd して(もちろん CLI で)、wc -lw \ | sort -u* を実行します
別のアクションに送信する HTML フォーム
送信ボタンに値を持たせて送信すれば、どのボタンでフォームが送信されたかを追跡できることは以前から知っていました。例:
以前に設定した order を上書きしたい場合
以前に設定した order を(default\_scope 経由のものでも)上書きしたい場合は、代わりに reorder() を使いましょう。
数を制限した has_many 関連
数を制限した has_many 関連
モデル名を一覧表示する
注意: RUBYOPT=-W0 は rails コマンド実行時の冗長な出力を抑え、警告を非表示にします。
Postgres の関数と Non-sargable なクエリ
postgres の関数を where 句の中で使うと、クエリが non-sargable になることがあります。
PostgreSQL の UPDATE Join
このクエリは、PostgreSQL の UPDATE join 構文を使って、別のテーブルの値をもとにテーブルのデータを更新する方法を示しています。たとえば:
RailsでscopeとscopeをORで組み合わせる
scope :human, -> { user.or(author) } scope :terminator, -> { admin.or(robot) } `
RailsアプリのTODOやその他のノートを表示する
rails notes を使うと、RailsアプリのすべてのTODO/OPTIMIZE/FIXMEを表示できるのをご存じですか?
Railsのログに有用な情報をタグ付けする
Railsのタグ付きロギングについて最近学びました。次のようにしてログにタグを付けられるのをご存じですか
コレクションのJSONスキーマでminItems/maxItemsを使う
コレクションのJSONスキーマの信頼性を高めるには、minItems と maxItems を使いましょう。そうすればAPIを信頼できるようになります。