Rails

Railsのポリモーフィック関連付けについて

ポリモーフィックとは 1つのモデルが他の複数のモデルに属していることを、1つの関連付けだけで表現できます。 一つのモデルを同じインターフェースを持ったものが扱う(ダックタイピングする) ポリモーフィックとは1つのモデルで関連付いた複数のモデルの…

Railsアプリケーションの規模感の掴み方

既存のRailsアプリケーションの規模感を掴むためのメモです。 各ファイル毎に見ていくと規模感が掴むきっかけになりそうです。 rails routes エンドポイント、URLの雰囲気を掴む。 テキストに落とすと見やすい rails routes > ファイル名 で出力結果をファイ…

【Rails】Git管理せずにRails newしたい

Git管理せずにrails new したかったので方法を調べました。 結論 rails new 時にG (--skip-git)オプションを付与する。 $ rails new アプリ名 -G $ rails new アプリ名 --skip-git # -Gと同じ rails new 時はデフォルトでGit管理が自動で行われる仕様になっ…

【Rails】migrationファイルを削除してしまってロールバックできない時の対処法

ロールバック前にマイグレーションファイルを削除してしまいロールバックできなくなってしまったので対処法を残しておきます。 そもそもちゃんとコミットを残しておけばgit checkout するだけでokなので、こまめなコミットを積んでおくの大事です(自戒)。 結…

【Rails】DHH流のコントローラ分割について

コードレビューでコントローラ分割のアドバイスを頂いたのでDHH流のRailsのコントローラの分割について調べました。 DHH流のコントローラ分割とは? コントローラが元々持っているRESTアクションやデフォルトの5つの機能にはないメソッドを付け加えたいと思…

RubyとRailsの?系メソッドのまとめ

メソッド名の末尾に?が付くメソッド(勝手に?系メソッドと呼びます)がたくさんありすぎてよく分からなくなったのでまとめました。 Ruby Rubyのメソッド。true/falseを返します。 nil?: オブジェクトがnilか? empty?: インスタンス(配列、ハッシュ、文字列等)…

【Rails】フォロー機能の設計と実装

フォロー機能の設計から実装までの情報を整理しました。 実現したいこと 次の2つの機能を実装したい。 自分以外のユーザーをフォローできる フォローしているユーザー 、フォローされているユーザー を取得できる フォロー機能のテーブル設計 上記のフォロー…

rails g controllerでディレクトリを指定してファイルを作成する

rails g controller でディレクトリを指定してファイルを作成したかったのでやり方を調べました。 結論 指定するディレクトリを/ か:: で区切って指定する。 $ rails g controller ディレクトリ名/コントローラ名 アクション名 $ rails g controller ディレ…

【Rails】orderメソッドの使い方

order メソッドで並び替えする必要が出たので使い方を調べました。 orderメソッドとは? 取得したレコードを特定のキーで並び変えるメソッド。 Active Record クエリインターフェイス - Railsガイド orderメソッドの使い方 次の書き方で取得したレコードを並…

【Rails】関連付けたモデルの外部キーへのpresense: trueは必要ない

コードレビューでpresense: true の使い方を指摘されたので調べてみました。 結論 関連付けたモデルの外部キーへのpresense: true は必要ない。 アソシエーションによって紐付けられた外部キーの存在しない値やnil の場合へのpresenceバリデーションは自動的…

【Rails】request.refererとは?

コントローラーでリダイレクトさせる際にrequest.referer という見慣れない記述を見かけたので調べてみました。 結論 request.referer で遷移元のURLを取得できる。 requestとは? 現在実行中のリクエストサイクルの中でリクエスト情報が保存されているreque…

【Rails】redirect_toでのnoticeの2つの書き方

redirect_to を使った際のnotice オプションの書き方を忘れていたので調べました。 noticeオプションとは? redirect_to にnotice を使うで遷移後にフラッシュメッセージを表示できる。 フラッシュを表示するためのオプション(キー)はnotice 以外にもalert …

【Rails】外部キー制約とは?

作成したアプリのコードレビューで外部キー制約を追加するように指摘されたので調べて見ました。 結論 外部キーを保存するカラムに対して関連付けしているテーブルの主キーのみを保存するように制限し、データ不整合を防止すること。 具体的には次の制約が追…

【Rails】ビューファイルのパーシャルにはローカル変数で値を渡すべき

パーシャルを使ってビューファイルを共通化する際にlocals オプションを使うべきなのか分からなかったので調べてみました。 結論 パーシャルにはlocals オプションを使ってローカル変数で値を渡した方が良い。 partialは呼び出し元のテンプレートとだけ紐づ…

Railsのform_withの使い方

Railsのform_with メソッドへの理解が曖昧だったので簡単にまとめました。 form_with の特徴 Rails5.1以降はform_tag とform_for が非推奨になり、替わりにform_with が推奨になる form_for 的な使い方、form_tag 的な使い方の2つの使い方ができる オプショ…

Railsでロールバックしてマイグレーションを修正する

FBCでRailsを使ったユーザーフォローのプラクティスを進めています。 間違ったマイグレーションをロールバックして修正する必要性が出たのでやり方を調べました。 結論 下記手順でDBをロールバックできる。 マイグレーションのバージョン確認 rollback する …

VSCodeにsolargraphを導入する

曖昧だったVSCodeへのsolargraphの導入について整理したのでまとめておきます。 結論 VSCodeでsolargraphを使うにあたって以下の2つが必要。 VSCode拡張機能Ruby Solargraph solargraph gem 下記手順で導入、設定する。 VSCode拡張機能Ruby Solargraph の導…

Active StorageのN+1問題を解決する

FBCのActive Storageを使ったユーザーアイコンの表示機能を実装しています。 Active Storageを使用した画像取得時にN+1問題が発生していると指摘を受けたので解決法を調べました。 結論 Active StorageのN+1問題はwith_attached_attachment_name スコープを…

Active Storageでアップロードする画像をimage_processingでリサイズする

Active Storageを使った画像アップロード機能を実装中です。 MiniMagickを使った画像リサイズの情報はたくさん見つかったのですが、image_processing gemを使った情報はあまり多くない印象でした。 Rails6からimage_processing gemが必要になったようなので…

Active Storageで画像アップロードに必要なgemについて

RailsのActive Storageを使った画像アップロード機能の実装を行っています。 Active Storageを使う際にgem等の多くのツールが必要になりますが、使用用途が分からずどのツールを使えば良いか分かりにくかったのでまとめました。 Active Storageを使った画像…

Active Storageを使った画像アップロード機能のセットアップ

FBCのRailsプラクティスも残り僅かになってきました。 Active Storageを使って画像アップロード機能を実装するという新しい課題に着手しました。 Acrive Storageを使った画像アップロード機能のセットアップについて調べました。 今回は次のような条件での実…

letter opener webでRailsのメール送信を確認する

前回の記事でRailsにdeviseでメール認証を使ったパスワード再設定を実装しました。 RailsのAction Mailerを使って送信したメールの内容をletter_opener_webというgemで確認できるようなので使い方を調べました。 結論 下記手順でletter_opener_web gemを導入…

RailsのdeviseでCookieを削除してログアウトする

deviseの課題を提出できたので気になってたことをちょっとだけ深堀りしてます。 今回はdeviseでのログイン認証を行っているアプリに対してCookieを削除してログアウトする方法を調べました。 結論 ChromeのDevToolsのApplication タブ内のCookies を選択して…

Railsで特定のアクションのみバリデーションをかけたい

FBCのRailsのdeviseのプラクティスで特定のアクションのみバリデーションをかけたかったので方法を調べました。 結論 特定のアクションのみバリデーションをかけるにはon: オプションでアクションを指定する。 バリデーションはデフォルトでレコード作成、更…

Railsで作成したカラム名を変更する

FBCのdeviseプラクティスで作成したアプリのカラム名を変更したかったので方法を調べました。 結論 作成済みのカラム名の変更は以下手順で行う。 カラム名変更用マイグレーションファイル作成 マイグレーションファイルにカラム名変更の記述を追加 マイグレ…

Railsで整数のみ、桁数指定でバリデーションを追加する

FBCのdeviseプラクティスで郵便番号に整数のみ、桁数指定でバリデーションを追加したかったので方法を調べました。 結論 バリデーションで以下を指定することで整数のみ、桁数指定を追加できます。 整数のみ: numericality: { only_integer: true } 桁数指定…

deviseをdevise-i18nを使って多言語化する

前回の記事ではRailsにdeviseでメール認証を使ったパスワード再設定を実装しました。 今回はアプリ全体の表示をdevise-i18n gemで多言語化します。 tigrish/devise-i18n: Translations for the devise gem 実装対象のアプリはRailsにdeviseを使ってログイン…

Railsにdeviseでメール認証を使ったパスワード再設定を実装する

前回の記事ではRailsアプリにdeviseを使ってユーザーページを追加しました。 今回はdeviseが用意してくれているrecoverble モジュールを使ってメール認証を使ったパスワード再設定機能を追加します。 実装対象のアプリはdeviseを使ってログイン機能を実装す…

Railsにdeviseを使ってユーザーページを追加する

前回の記事ではRailsアプリにdeviseでログイン機能を実装しました。 今回はプラクティスの終了条件である次の3つのページを追加します。 ユーザー詳細: users#show ユーザー編集: users#edit ユーザー一覧: users#index 実装対象のアプリはdevise gemのイン…

Railsにdeviseを使ってログイン機能を実装する

前回の記事ではRailsアプリにdevise gemをインストールしてセットアップしました。 今回は実際に認証機能付きモデルを追加し、ログイン機能を実装します。 実装は下記の手順で行います。 認証機能付きモデルの作成 認証機能用ビューの作成 認証機能用コント…