時々とおまわり

プログラミング雑記

Rails

【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をインストールしてセットアップしました。 今回は実際に認証機能付きモデルを追加し、ログイン機能を実装します。 実装は下記の手順で行います。 認証機能付きモデルの作成 認証機能用ビューの作成 認証機能用コント…

Railsにdeviseをインストールしてセットアップする

FBCのRailsでdevise gemを使ったプラクティスに入りました。 devise gemのインストールとセットアップについて調べました。 追加設定は基本的には行わず、動作確認が行える最低限のdeviseの機能が使える状態を目標にしました。 devise gemを追加するアプリケ…

dotenv gemの使い方

GitHubにアップしたくないAPIキーやパスワード等を環境変数として設定するgem。 bkeepers/dotenv: A Ruby gem to load environment variables from `.env`. インストール Gemfile に追記後bundle install するだけ。 # Gemfile ... # 追記 gem 'dotenv-rails…

ERB Lintについて

FBCのRailsのプラクティスにERB Lintの導入が必須になったので概要を調べてみました。 結論 ERB LintとはrubocopではチェックできないERBファイルのスタイルをチェックしてくれるツール。 Shopify/erb-lint: Lint your ERB or HTML files インストール Gemfi…

Railsでテーブルにカラムを追加する

FBCのdevise gemを使ったプラクティスを進行中です。 今回作成するRailsアプリではdevise gemを使った認証機能とプロフィールページの作成が終了条件になっています。 このプロフィールページにはdeviseのデフォルトで設定されるメールアドレスに加えて、郵…

Gitで未追跡のファイルやディレクトリを削除したい

FBCのRailsのdevise gemを使ったプラクティスを進めています。 RailsやGemが自動生成したファイルを削除したくなる状況が度々あったので、Gitで未追跡のファイルやディレクトリを削除する方法を調べてみました。 結論 git clean コマンドを使うとgit未追跡の…

rails g controller で不要なルーティングの追加をスキップしたい

FBCのRailsのプラクティスでdevise gemの使い方を学んでいます。 ログイン機能とプロフィールページの追加にUserモデルのcontrollerが必要になりました。 既にに必要なルーティングは追加済みだったのでrails g コマンドでcontrollerを作成する際にルーティ…