Rails関連のことを調べてみた

Rails関連のことを調べてみた

RailsのEnum型を使う

## Enum(列挙型)とは
名前がついた定数の集まりです。
あらかじめ用意した選択肢の列挙からデータを選択することで、可読性の向上, 値の代入ミスを防ぐことができます。

## DBのEnum(列挙型)
RailsのEnumを見る前にDBレベルでのENUMについて説明します。
DBのENUMはテーブル作成時に列挙された定義リストに存在する値のみを保管可能になるデータ型です。

要するに”banana”, “apple”, “orange”と定義すると、その3種類しか保存ができなくなります。

## Ruby on RailsでのEnum
Railsのenum型は`数値のカラム`に対してプログラム上で扱える別名を付与することで使用することが可能です。

重要な点としてDBレベルで見るとカラムの型は`数値`です。
これにより、DBのカラムの型自体をEnumにした場合と比べ、カラムに保存可能な値を変更したい際に、DBの変更が必要になる点や、アプリ側からカラムに保存可能な値がわかりづらいという問題点を解消できます。

## Enum型を定義する
今回はAnimalというModelを作成し、k

元記事を表示

【Ruby】URI.escapeが使えない

## はじめに
Railsのアップデート中にURI.escapeを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
コード
“`ruby
URI.escape(str)
“`

エラー文
“`ruby
NoMethodError (undefined method `espace’ for URI:Module)
“`

## 解決方法
Ruby3.0からURI.escapeは削除されました。また、URI.unescapeも削除されています。
代わりに、CGI.escapeやURI.encode_www_formなどを使用します。

## 参考

元記事を表示

【MySQL】COALESCE関数を活用した日数の計算

# はじめに
ActiveRecordのメソッドだけでは表現できないような書き方についてまとめます。

きっかけは、Railsのselectメソッドで、SQLを直接書く場面があったことです。
その時にSQLの重要性がより理解できたので共有させて頂きます。

# 前提知識
## selectメソッド
データベースから取得するカラムを指定するためのメソッドです。
selectメソッドは、SQLの**SELECT句**に相当します。

### 基本的な書き方
“`ruby
# 全てのカラムを取得
User.select(“*”)

# 特定のカラムのみを取得
User.select(:name, :email)
“`

### 複数のテーブルを結合して取得
“`ruby
# UserモデルとPostモデルを結合して、ユーザー名と投稿タイトルを取得
User.joins(:posts).select(“users.name, posts.title”)
“`
:::note info
`joins`によるテーブル結合については[こちらの記事](https://qiita.com/k12

元記事を表示

【React ✖️ Ruby on Rails】Todoリストを進化させてみた

## 前回のはなし:page_facing_up:

前回の初投稿でReactを使ってTodoリストを作成を作成しました。

記事はこちら↓

https://qiita.com/kurumi-program/items/0e5412cdc59643683408

でもこれだと…

**リロードすると元に戻ってしまう → 値が保存されていない!!!**

そうなるとこのTodoリストを使った人の末路は…

自分「よし、今日のやること書いたぞ!これで頑張ろ!」
…1時間後
自分「あーー、ブラウザのタブ開きすぎてもうよく分からなくなってきた…一旦全部閉じよ」
再びブラウザ開き、作業に入る
自分「そういえば、これ終わったら何するんだっけ?Todoリスト確認するか!」
確認しようとTodoリストを起動
自分「あれ?何も書いていないじゃん!
ってことは、今日のやることはもう終わったのか!!

Dev ContainerによるRails開発環境構築

# 概要
– Dev Containerを触る機会が有ったので、手軽にセットアップする手順をまとめました
– 簡易に作成できるよう、Dev Containerで用意されている開発コンテナを使用しています
– 手順は [公式サイト](https://code.visualstudio.com/docs/devcontainers/containers#_picking-your-quick-start) をベースにしました

# 環境
Ubuntu 22.04 on WSL2

# 手順
## 1. 作業用フォルダの作成
– WSLターミナルにてコマンド実行
“`sh
mkdir devcontainer-start && cd $_
“`
## 2. VS Codeを開く
“`sh
code .
“`

## 3. コマンドパレットを開き、開発コンテナを設定する
– Ctrl + Shift + P(Windows/Linuxの場合)またはCmd + Shift + P(Macの場合)を押して、コマンドパレットを開く
![image.png](https://qiita-ima

【Rails / ActiveRecord】find / find_by / where の違いをざっくり理解する

# はじめに
お疲れ様です!
コンソールでデータ取得する際に`find`, `find_by`, `where`をなんとなく使用しており、使い分けについて説明することができなかったので、ざっくりまとめていきたいと思います:writing_hand:

![qiita_find.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117662/23df6702-8d94-0c81-4a9d-0bb49cc8b8ab.png)

先に3つの違いを一覧をまとめた上で、それぞれの特徴を書いていきます:sunglasses:

# 違いまとめ

| メソッド     | 用途 | 返り値 | 条件に合わない場合 |
|————-|—————————————-|———————–|——————–

プログラミングとHTMLの「class」の違いについて

Qiitaにはマークダウン式で記入するルールというルールがあるのですね。
毎回無視していて申し訳ありません。
マークダウン式が分かっていないので、近日中に必ず学んでマークダウン式で記事を書きたいと思っているので今回は(もしかしたら次回も)この書き方で勘弁してください。

Railsの勉強をしています。
練習課題に日々取り組んでいますが、その中で気になることがありました。
記述していく中で「class ~」と出てくるのですが、これってHTMLのclassと同じ意味なのか、違う意味なのか、ということです。

同じ「class」なんだから同じ意味でしょ!と最初は深く考えていませんでしたが、進めるにつれて「やっぱり意味が違うのでは?」と思うようになりました。

そこで今更ながら、Ruby(プログラミング)とHTMLの「class」の意味の違いをまとめておきたいと思います。

Ruby(プログラミング)の「class」は「設計図」
HTMLの「clss」は「ラベル」

という理解が自分の中ではしっくりきます。

Rubyの「class」は、「class」の中で動作が定義されていきますが、
HTM

【Rails】config.load_defaultsで指定したバージョンのデフォルト設定を読み込む

## はじめに

Railsアプリケーションのバージョンアップ作業に携わる中で、`config.load_defaults`という設定オプションについて学びました。

そこでこの記事では`config.load_defaults`の役割や使い方、バージョンアップ作業時の取り扱いについてまとめます。

対象読者は次のとおりです。

– Railsの設定まわりに興味のあるエンジニア
– 歴史のあるRailsアプリケーションに携わっている(Rails5.0以前)
– Railsのバージョンアップ前に設定ファイルをリファクタリングしたいエンジニア

## `config.load_defaults`とは?

`config.load_defaults`とは、**指定したRailsバージョンのデフォルト設定を一括で読み込むための設定です。**

`config/application.rb`に記述されています。

下記はRails7.2で`rails new`した時点の`config/application.rb`です。

“`rub

Github OAuthAppでOAuth2.0を体験してみた

# 背景
OAuth2.0の仕組みを触って体験したかったので、Github OAuthAppを使って実践してみることにした。

理解に間違えなどがあればご指摘いただけると幸いです。

# OAuth2.0とは?
クライアントアプリ(以降:クライアント)がユーザーが登録しているGihubのユーザー名を取得したいとする。
当然、クライアントはユーザーのGithubへのアクセス権限がない為、OAuth2.0という技術を使って解決する。
方法は、クライアントがユーザーにGithubへの認可・認証をしてもらい、Githubの認可サーバからアクセストークンを発行してもらうことで、クライアントは一時的にユーザーが認可した範囲のGithub情報へアクセスすることができるようになる。

尚、OAuth2.0のフローには4つの種類があり、当記事は認可コードを使ってアクセストークンを取得するフローで検証していく。

# 前提
・Githubアカウントを持っていること
・rails new でプロジェクトが作成されていること

**※当記事はOAuth2.0の体験用に最小限かつ簡易的に作ったものです。ご参考に

RailsのコントローラーとDB作成

# railsでコントローラーを作るには
“`
rails generate controller コントローラー名 アクション名1 アクション名2 …
“`
とする。
また、コントローラー名は複数系にする
アクション名は作りたいファイル名にする

“`
rails generate controller users index
“`
# railsでDBを作成するには
“`
rails generate model モデル カリム名:データ型
“`
モデルは先頭の文字を大文字にして単数形にする


“`
rails generate model User name:string email:string
“`
とする。

そして、データベースの変更を保存する
“`
rails db:migrate
“`
# カリムだけを追加するには
マイグレーションファイルの名前はなんでもいいが変更がわかるような名前が望ましい
“`
rails generate migration add_user_id_to_posts
“`
とコマンドを打ち込んで、マイグレーショ

dockerでrailsアプリを動作させるのとgitとgithubの使い方

# dockerの中のrailsアプリを実行する
①コンテナを再起動させる
“`
docker-compose up –build
“`
②コンテナの中に入るために、
コマンドを書いて、別のターミナルを開いてアプリのファイルまで行ってから

“`
docker-compose exec web bash
“`
コマンドを打つ
③サイトにアクセスする
“`
localhost:3000
“`

# gitとgithubの使い方
コードをgithubにアップするためには、
①現在の変更したファイルをステージ(追加)する。
“`
git add .
“`
②ステージされた変更をコミット(確定)させる。
これにより、ステージされた変更がローカルリポジトリに保存されます
“`
git commit
“`
③ローカルリポジトリの変更をリモートリポジトリに反映させる
“`
git push
“`
# PostgreSQLに入るには
“`
docker ps
“`
を出力して今動いているコンテナのIDを取得する
そしてPostgreSQLのIDをメモして
“`
dock

ActiveRecord::Core の clone と dup の違い

## clone と dup の違い

– clone
– shallow コピー
– **id を保持する**
– **タイムスタンプやロックに関する属性を保持する**
– **属性はコピーしない**
– つまり、clone したオブジェクトの属性を変更すると、元のオブジェクトの属性も (同じオブジェクトなので) 変更されてしまう
– アソシエーションはコピーしない

– dup
– shallow コピー
– **id は保持しない (新規レコード)**
– **タイムスタンプやロックに関する属性は保持しない**
– **属性をコピーする**
– アソシエーションはコピーしない

“`rb
yoyo = Yoyo.find_by!(name: ‘モジョ’)
cloned_yoyo, duped_yoyo = yoyo.clone, yoyo.dup

# duped_yoyo は新規レコード扱い。
[yoyo.id, cloned_yoyo.id, duped_yoyo.id]
#=> [1, 1, nil]
[yoyo.new

ルーティングは極力ルーティングヘルパーを使おう

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

## 記事投稿の背景
この記事ではアプリ制作中に分かったview側でのルート指定の方法やそれぞれのルーティングのメリット・デメリットをご紹介していきます。

## ルート指定の方法

以下の資料はRailsで閲覧できるルーティングのリストです。
“`ruby:docker compose exec web bin/rails routes
docker compose exec web bin/rails routes
Prefix Verb URI Pattern Controller#Action
home_index GET

rails 都道府県をプルダウンで選択できるようにする #初心者

# 1. 背景

タイトルの通り都道府県をプルダウンで選択できるようにする方法をまとめました。
始めは、htmlをべたっと書いていたのですが、Active_Hashと言うものの存在を知り、そちらに移行しようとしました。

# 2. Active_Hashとは

初心者には以下の説明がわかりやすかったので引用。
> Active_Hashとは、都道府県名やカテゴリー選択などの変更されないデータをモデルファイル内に直接記述することで、データベースへ保存せずにデータを取り扱うことができるgemです。
> Active_Hashを用いることで、モデルファイルに直接記述した変更されないデータに対して、ActiveRecordのメソッドを用いることができます。

https://qiita.com/iwkmsy9618/items/60ea01f4f4285d14c597

# 3. gem の追加

Gemfileに追記したのち、“bundle install“する。

“` app/Gemfile
gem “active_hash”
“`

# 4. modelの追加

私は手動で、m

Railsモデルの関連付けについて

# 背景
モデル関連付けの基礎が抜けていると実感したのでChatGPTと壁打ちしながら復習しました!
備忘録という目的も兼ねて残してまとめます。

# 当方の執筆前のレベル感
外部キー制約とは?
ポリモーフィック?横文字ワカラナイ….

Railsエンジニア1年目とはいえひどい状態

## 1対多

例)1人のユーザーが複数のコメントをする関係

“`
rails g model User name:string
rails g model Comment content:text user:references
“`
referencesオプションである、`user:references`を付けることでcommentsテーブルに外部キー制約である`foreign_key: true`を追加され、commentsテーブルにはUserのレコードidと紐付く`user_id`のカラムが追加される

“`rb
# 各モデルファイル

class User < ApplicationRecord has_many :comments # userは複数の投稿を持つ end cla

Ruby環境不要のRailsアプリジェネレータ rails-new

Railsプロジェクトを新規に作ろうと思った時、OSアップデートとかの影響で環境構築につまづいちゃうみたいなこと経験ありませんかね (Railsに限った話ではないんだけど)

そんなときに役立つのが、わりかし最近リリースされた`rails-new`ジェネレータです。

https://x.com/robzolkos/status/1842615591812690328

## `rails-new`とは?

[`rails-new`](https://github.com/rails/rails-new)はrust製のRailsアプリの雛形ジェネレータです。

このツールの最大の特徴は、ローカルマシンにRubyやRailsの環境がなくても、簡単に新しいRailsプロジェクトの雛形を作成できることです。

[リリースページ](https://github.com/rails/rails-new/releases)からバイナリをダウンロードして、パスの通ったディレクトリに配置するだけで `rails-new` コマンドが使用可能になります。

## 基本的な使い方

`rails-new

【Ruby】学習内容まとめ①

Stringについて学んだことを整理しました。

Stringに使用するメソッド一覧

**upcase**
…小文字の文字列を大文字にする
<使用例>

test = 'test'
test.upcase
    =>TEST

—————————-
**downcase**
…大文字の文字列を小文字にする
<使用例>

test = 'TEST'
test.downcase
    =>test

—————————-
**slice**
…文字の切り分けを行う
<使用例>

test = 'あいうえお'
 test.slice(1,2)
  => "いう"

—————————-
**size**
…文字の大きさを確認する
<使用例>

test = 'あいうえお'
 test.size
  => "5"

—————————-
**to_i**
…文

Redisの挙動を実験

# はじめに
RailsでRedisを使うために挙動を確認しました。
Railsで使ってはいるのですが、薄めのラッパー関数でRedisのコマンドをほぼそのまま呼び出すだけなので、Redisに直接実行してるのと変わらないかと思います。

Redisはdockerで動かしています。

#### バージョン
– Redis: v7.2
– Rails: v7.0
– redis-client(gem): v0.22.2

# 初期化
initializerでredisインスタンスを作ります。

“`ruby
redis_config = RedisClient.config(host: “redis”, port: 6379, db: 1)
REDIS_DATA_STORE = redis_config.new_pool(timeout: 3, size: Integer(ENV.fetch(“RAILS_MAX_THREADS”, 5)))
“`

# 基本構文

“`shell
pry(main)> REDIS_DATA_STORE.call(“SET”, “id1”, “some

【Rails】Rspecでテストを行う際に使ったメソッドまとめてみた

こんにちは!
今回は、実際にRspecでテストをする上で使ったメソッドをまとめてみました。

### 1, “` describe “`
テストのグループ化に使用され、テスト対象となるクラスやメソッドの説明を行う。
“`php
describe ‘User’ do
# Userクラスに関するテスト
end
“`

### 2, “` context “`
条件によるグループ化を行う。
“`php
context ‘when user is an test’ do
# ユーザーがテストの場合
end
“`

### 3, “` it “`
具体的なテストケースを記述し,期待する結果をexpectを使って定義。
“`php
it ‘returns the correct name’ do
expect(user.name).to eq(‘Yamada’)
end

“`

### 4, “` expect “`
テストで期待する結果を定義するために使用。
メソッドやオブジェクトの動作が期待通りであるかどうかを確認
“`php
expect(user

【Ruby on Rails vs Supabase】: 比較しながら学ぶ Supabase CLI

## はじめに

Supabase CLIを学びたいけれど、どこから始めればいいか迷っていませんか?

本記事では、RailsとSupabase CLIを比較しながら、効率的な学習方法を紹介します。
既存のRails知識を活かして、Supabase CLIの基本をスムーズに習得できるよう構成しています。
Railsとの類似点や相違点を明確にしながら、Supabase CLIの特徴と使い方を解説していきます。

Rails開発者の視点から、Supabase CLIをマスターしましょう!

## 目次

1. [Supabaseとは?](#supabaseとは)
2. [Supabase CLIの概要](#supabase-cliの概要)
3. [環境構築の詳細比較](#環境構築の詳細比較)
– [Ruby on Railsの環境構築](#ruby-on-railsの環境構築)
– [Supabase CLIの環境構築](#supabase-cliの環境構築)
– [環境構築の比較表](#環境構築の比較表)
4. [プロジェクトのセットアップ手順](#プロジェクトのセッ