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

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

【Railsチュートリアル】第11-14章 まとめ

## 第11章
### コンソールの改行
“`ruby:ターミナル

rails generate migration add_activation_to_users \
> activation_digest:string activated:boolean activated_at:datetime

“`

### メーラーの生成
“`ruby:ターミナル

rails generate mailer UserMailer account_activation password_reset

“`

### メールを即時送信
“`ruby:app/controllers/users_controller.rb

UserMailer.account_activation(@user).deliver_now

“`

### メッセージを渡し、動作させる
“`ruby:app/models/user.rb

digest = self.send(“#{attribute}_digest”)

“`

### コントローラのアクション内で定義された変数をテストで使

元記事を表示

【Railsチュートリアル】第6-10章 まとめ 

## 第6章
### データベースを変更しないようにコンソールを使う
“`ruby:コンソール

rails console –sandbox

“`

### オブジェクトが有効化を確認
“`ruby:コンソール

>> user.valid?
true

“`

### データベースにオブジェクトを保存
“`ruby:コンソール

>> user.save

“`

### オブジェクトの生成とデータベースへの保存
“`ruby:コンソール

>> User.create(name: “A Nother”, email: “another@example.org”)

“`

### データベースからの削除
“`ruby:コンソール

>> foo.destroy

“`

### idからデータを検索
“`ruby:コンソール

>> User.find(1)

“`

### 値からデータを検索
“`ruby:コンソール

>> User.find_by(email: “michael@example.com”)

“`

### データベースの最

元記事を表示

【Railsチュートリアル】第1-5章 まとめ

## 第1章
### サーバー実行
“`ruby:ターミナル

rails server

“`

### ファイル確認
“`ruby:ターミナル

ls app/controllers/*_controller.rb

“`

### Gitの設定内容の確認
“`ruby:ターミナル

git config –list

“`

### 全ての変更ファイルをステージング
“`ruby:ターミナル

git add -A

“`

### 現在のステージング状態を知る
“`ruby:ターミナル

git status

“`

### ステージングされた変更内容をリポジトリに保存
“`ruby:ターミナル

git commit -m “Initialize repository”

“`

### これまでのコミットメッセージ履歴を確認
“`ruby:ターミナル

git log

“`

### 直前にコミットした状態まで戻る
“`ruby:ターミナル

git restore

“`

### ブランチを新たに作成し、移動する
“`ruby:タ

元記事を表示

【Progate】Ruby on Rails 5 まとめ

## 各コードの機能

### ターミナル
|コード|機能|
|:-|:-|
|`rails new アプリ`|入力したアプリ名と同じファイルを作成|
|`rails server`|サーバーを起動|
|`rails g controller コントローラ名 アクション名`|コントローラとそれに対応したファイルを作成|
|`rails g model テーブル名 カラム名:データ型(※テーブル名は単数系&頭大文字)`|マイグレーションとモデルを作成|
|`rails g migration`|マイグレーションのみを作成(マイグレーションの中身は自分で作成する必要がある)|
|`rails console`|コンソールを起動|
|`quit`|コンソールを終了|
|`File.write(ファイルの場所,ファイルの中身)`|指定したファイルの場所にファイルの中身を記述する|
|`bundle install`|Gemfileに記述したgemをインストールする|
|`インスタンス名.save`|インスタンスをテーブルに保存|
|`モデル名.first`|テーブルから一つのデー

元記事を表示

【RSpec】先輩のテストの書き方が美しかったので真似できるようにメモ

## これはなに?

タイトルの通りです。

## どんなテスト?

例を3つ作成したので、実際に見て頂いた方が早そうです。

### 期待値が具体的にある場合

例えば今、以下の関数を作成し、その挙動を確かめるテストを作成するとします。

“`ruby
def some_func(n)
n + (n + 1)
end
“`

与えられた値と、その次の値を足すだけの単純な関数ですね。

これをテストしましょう。

“`ruby
describe ‘#some_func’ do
# テストケースの配列を定義 ([入力値, 期待される出力])
test_cases = [
[1, 3], # 1 + (1 + 1) = 3
[2, 5], # 2 + (2 + 1) = 5
[5, 11], # 5 + (5 + 1) = 11
[10, 21], # 10 + (10 + 1) = 21
[100, 201] # 100 + (100 + 1) = 201
]

test_cases.each do |input, e

元記事を表示

【Rails】テーブルのリレーションを柔軟に設定する

## これはなに?

テーブル設計において、リレーションは大切な要素です。
一般的には`belongs_to`や`has_many`等で紐づけをします。
モデル内で紐づけるテーブルを指定することでこれを実現することができます。

本記事は、紐づけるテーブルを柔軟に設定できる「ポリモーフィック関連付け」という方法を学んだのでそのアウトプットです。

## どんなことができるようになるのか?

結論、ポリモーフィック関連付けを活用するには、テーブル内に2つのカラムが必要となります。

– xx_type: 紐づけるテーブルを指定
– xx_id: 紐づけ先のid

xxは、関連付けるモデル名に基づいて命名されます。

例えば今、以下の3つのテーブルがあるとします。

– 子(関連付けられるテーブル): hoge
– 親(関連付け候補のテーブル): fuga
– 親(関連付け候補のテーブル): piyo

ここでhoge, fuga, piyoテーブルはそれぞれポリモーフィック関連付けされているとします。

hogeテーブルに`foo_type`と`foo_id`というカラムを用意したとき、

元記事を表示

RailsプロジェクトにGitHub Actionsを導入する方法(Rspec, Rubocop)

# 概要
この記事では、RailsプロジェクトにGitHub Actionsを導入し、RspecとRubocopを自動実行する手順について解説します。GitHub Actionsを利用することで、コードをプッシュするたびに自動でテストが実行され、コーディング規約に違反していないか即座に確認できます。これにより、開発プロセスの効率化とコード品質の向上が期待できます。GitHubActionsによるRSpec・RuboCopのCI設定を備忘録的に整理しました。

# 環境
* Ruby 3.2.0
* Rails 7.0.8
* rspec 3.13
* selenium-webdriver 4.10.0
* rubocop 1.60.2

# 参考リソース
https://zenn.dev/ryouzi/articles/cd6857c08e60e7

https://qiita.com/jhanyu/items/e2f467684873d806ad00

※前提として、RspecやRubocopの実行に必要なGemや設定などは導入済みであるものとします。

# rails.ci.

元記事を表示

Dockerコンテナ間のAPI通信でハマった話 – host.docker.internalの存在

## 前提知識

– Dockerを使って、フロントエンドとバックエンドを別々のコンテナで開発していた
– フロントエンドにはNext.js14(AppRouter)、バックエンドにはRails7を使用

## 問題

フロントエンドからバックエンドへのAPI呼び出しを行おうとしたが、うまく通信ができなかった。
フロントエンドのコードでは、バックエンドのAPIエンドポイントを`http://localhost:3000/api/…`のように指定していた。

## 原因

Dockerコンテナ内では`localhost`が指すのはコンテナ自身であり、別のコンテナを指すことができない。そのため、フロントエンドのコンテナから`localhost`を使ってバックエンドのコンテナにアクセスしようとしても、正しく通信ができなかった。

## 解決方法

### Next.jsコンテナの設定

Dockerコンテナ間で通信を行う際には、`host.docker.internal`を使用する。`host.docker.internal`は、Dockerコンテナから見たホストマシンのIPアドレス

元記事を表示

find_or_create_byメソッドについて

## はじめに

個人開発でOmniAuthを用いた認証機能を実装する際に、“`find_or_create_by“`メソッドの挙動について疑問が生じたので、その点について調べてみました。

:::note warn

初学者のため間違いがあるかもしれません。
その際はご指摘いただけると嬉しいです。

:::

## 元々の認証機能の一部

既存のユーザーに対して変更があった際には、updateメソッドで更新をしたかったのですが、“`user_update(user_params)“`の部分が動いていないようだったのでなぜだろうと気になりました。

“`ruby
def self.find_or_create_from_auth_hash(auth_hash)
user_params = user_params_from_auth_hash(auth_hash)
User.find_or_create_by!(uid: user_params[:uid]) do |user|
user.update(user_params)
end
end

元記事を表示

Docker環境でLetter Openerの限界と対策

### 問題
Ruby on Railsの開発プロセスでは、メール機能のテストが不可欠です。Letter Opener gemは、開発環境でメールを実際に送信せずに、すぐに確認できる便利なツールです。しかし、Letter OpenerがLaunchyを介してメールをウェブブラウザで開くため、ローカルの開発マシン以外の環境(ステージングサーバー、VM、Dockerコンテナなど)では、ウェブブラウザを見つけることができず、次のような警告メッセージが表示される問題が発生します。

“`
WARN: Launchy::CommandNotFoundError: Unable to find a browser command. If this is unexpected, please rerun with environment variable LAUNCHY_DEBUG=true or the ‘-d’ commandline option and file a bug at https://github.com/copiousfreetime/launchy/issues/new
`

元記事を表示

【個人開発】運動の習慣化を手助けするサービス『トレゴリ』をリリースしました🦍

# まず初めに
皆さん初めまして、[のぞみ](@muscle_gori02)と申します。
私は現在、未経験からのWEBエンジニア転職を目指して、日々学習&転職活動を行なっております。
2024年2月に、運動の習慣化を手助けするゲームフィケーションサービス『トレゴリ』をリリースしました!
**「トレゴリ?なんかゴリラに関係するアプリ何かな?」**
と思われた皆さん、ご明察です…!
今回の記事では、『トレゴリ』の具体的なサービス内容・開発のきっかけ・使用技術…などについて書きました。

少々長くなっておりますが、是非最後まで読んでいただけると嬉しいです。笑

# 自己紹介
個人開発のお話に入る前に、少し自己紹介をさせていただきたいと思います🦍
私は地元の高校卒業後、とある製造企業へ入社し生産管理部門の進行長として、約6年間社内製造の進行計画管理に携わってきました。

そんな中で色々あり、エンジニアを目指すべく昨年4月に某プログラミングスクールへ入学しました。
(経緯等については長くなってしまうので、省略させていただきます…笑)

昨年12月まで仕事と学習

元記事を表示

超基本のエラー対処法

# はじめに

「うまく動かない」時、僕が普段意識しているであろうことを書き連ねていきます。

Railsを中心に説明(雑)をしていきます。よろしくお願いします。

# とにかくログに出す!

Railsだと`p`あるいは`puts`メソッドを使い、変数やリクエストやらをログに出力します。

`p`と`puts`の違いは基本気にしなくていいです。うまくいかないときはもう片方を使ってください。そのうち慣れます。

“`rb
puts “—————”
puts arg # 変数
puts “—————”
“`

こんな感じで書くと見やすいです。

# とにかくログを読む!

## どこを見るの?
ログは、例えば`docker compose up`したところに流れます。
`docker compose up -d` と、`-d`オプションをつけるとログが見づらくなります(たぶん。使ったことない)。

## 何を見るの?
特にRailsの場合は、
「どのHTTPリクエストがきているか」

Swiperのコードは階層構造になっていますか

## はじめに

Swiperを用いてトップ画像をスライダー形式に変更しようとした時に**思わぬところ**で詰まった時の話です。

## 環境

ruby 3.14

rails 7.0.3.1

swiper 11.0.7

## 用語

**スライダー形式とは**

**複数の画像がスライドのように、一定の間隔で切り替わるもの**です。ホームページのトップ画面などでよく見かけます。スライドしている画像をクリックすると、関連ページに飛べるようにも出来ます。

**Swiperとは**

jQueryプラグインの1つ。

**jQuery**とは、「表示されているページを使いやすくする」ための機能であり、**jQueryプラグイン**とは、「Webサイト作成で特定の機能が欲しいときに、jQueryと併用して利用できる」ものです。簡単な設定で導入できるとても便利なものです。

[Swiperのサイト](https://swiperjs.com/)に書いてあるコードでシンプルな実装が出来る他にも、npmや**yarn**などのパッケージマネージャーを使ってSwiperをプロジェクトにインス

M1 Macでmysql2がインストールできない時の対処法

久しぶりにローカル環境でRailsを構築した際にエラーが出たので対処法をまとめます。

# 使用環境

– Apple M1
– ruby 3.1.2

# エラー文
`bundle install`をするとmysql2のビルドエラーが出ました。

“`
Fetching gem metadata from https://rubygems.org/………
Resolving dependencies…
Installing mysql2 0.5.6 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.


中略

Using mysql_config at /opt/homebrew/bin/mysql_config
—–
checking for mysql.h… yes
checking for errmsg.h… yes
checking for SSL_MODE_DISABLED in mysql.h.

Rails7.0.8でsqliteに対してchange_columnするときは必要な全ての要素を指定しよう

# 最初にざっくりまとめ
– `Rails7.0.8`で`sqlite`の`change_column`に対して変更が入った
– その影響で以前とは振る舞いが変わっている
– `change_column`で指定した要素以外の設定がデフォルトに戻ってしまう
– `mysql`では起きない(検証してないけど多分`sqlite`以外は大丈夫)

つまり、 **`Rails7.0.8`で`sqlite`に対して`change_column`するときは必要な全ての要素を指定しよう**

# 調べたこと

## `Rails7.0.8`のリリースノート
https://github.com/rails/rails/releases/tag/v7.0.8

色々と機能がリリースされていますが、今回の事象に関わるのは以下。この修正で`sqlite`の`change_column`に対して実装が追加されています。

>Fix change_column not setting precision: 6 on datetime columns when using 7.0+ Migrations a

reject(&:empty?)と正規表現などを駆使して配列をいじる場合、grepが良さそう

## 課題
数字の文字列の配列として返却されるbook_idsを、整数の配列に変換し、さらに重複を除去したい。

“`book_ids.rb
[“1”, “2”, “2”]
“`

## アプローチ1
rejectメソッドを使用して空の要素を除去し、selectメソッドで数値のみを含む要素を選択し、最後にmapメソッドで整数に変換し、uniqメソッドで重複を除去する方法。

“`rb
book_ids = book_ids.reject(&:empty?).select { |id| id.match?(/^\d+$/) }.map(&:to_i).uniq
“`

こんな感じです。
ただ、このままだとパッと見何をしているかわからず、もう少し工夫できそうです。

使えそうなメソッドがないか探し、Enumerable#grepが良さそうだなと思ったので、正規表現をそのまま活用して良い感じにできないか考えてみました。
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/grep.html

## アプローチ2
grep

RSpecで日時を指定してテストを実行する

コード内で、下記のように現在の時間を指定して実行しているコードがあった。

“` ruby
# 現在の日時は営業日かの判定
isWorkDayToday = Time.current.to_date.workday?
“`

この「現在の時間」が例えば⚪︎月⚪︎日というように自身が設定した日時でテストをしたい。

## TimeHelpersを使う
今回はRubyのTimeHelpersを使うことにした。

メソッドがいろいろありますが、今回はtravel_toを使うことに。

## rails_helper.rbの設定
“` Ruby
# 下記の設定を追加
require “active_support/testing/time_helpers”
RSpec.configure do |config|
config.include ActiveSupport::Testing::TimeHelpers
end
“`

## テストを書く
“` Ruby
require ‘active_support/testing/time_helpers’

RSpec.descri

Rails/devise_アカウント情報編集ボタンが反応しない場合解決方法

# はじめに
初歩的な記述ミスが原因で起こったエラーですが、
原因を見つけためにかなり時間がかかったのでまとめます:joy:

# 環境
・Ruby 3.1.2
・RubyGems 3.3.7
・Bootstrap 4.6.2
・class Public::UsersController < ApplicationController作成済み ・Deviseを使用してユーザー認証機能を実装 # 1.発生した問題 マイページ内にある「編集する」ボタンを押して会員情報編集画面に遷移したあと、 会員情報を編集し、「編集内容を保存」を押すと、更新されない(__ボタンが反応しない__)ことがある。![スクリーンショット 2024-03-18 010002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724261/22736ad3-01f6-2af3-32b5-e92d3b9a1f11.png) ![スクリーンショット 2024-03-17 212140.png](https://qiita-image-st

Rails_リクエストがDELETEの代わりにGETで送信される場合の対処法!

# はじめに
2023年12月からプログラミング学習を始めました :smiley:
アウトプットのために今まで起こったエラーや学習したことをまとめようと思います。
初心者のため、解釈などに誤った点があるかもしれません💦
その際はお気軽に教えて頂けますと大変助かりますm(__)m!!

# 環境
・Ruby 3.1.2
・RubyGems 3.3.7

# 1.発生した問題
Deviseを使ってWebアプリにログアウト機能を実装したが、
ログアウトボタンを押すと、[DELETE]メソッドで送信したいリクエストが[GET]メソッドとして送信されてしまい以下のようなエラーが表示される。

![スクリーンショット 2024-03-17 230022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724261/82b7e1c6-50e2-efa8-eb30-c0ba1a2a6b87.png)

# 2.疑った原因

①ルーティングの設定に間違いがある。
[■参照した記事](https://qiita.com/r

OpenAPIとは?基本的な構造、書き方、使用例について調べてみた。

# はじめに
お久しぶりです。前回から2週間空いてしまいました。今回はOpenAPIの記事になります。
プログラミング学習コミュニティ「Progaku」では現在チーム開発を行なっております。そのチーム開発のタスクの中でOpenAPIを書くこと、CommitteeRailsを使用してRspecのテストへの反映を行いました。
どちらも初めて使用したので、色々と調べる中で知ったことをまとめていきたいと思います。

## OpenAPIとは?

https://www.openapis.org/

公式の見出しを翻訳した結果がこちら(笑)

> OpenAPI仕様は、HTTP APIを記述するための正式な標準を提供します。
これにより、APIがどのように動作するかを理解したり、クライアントコードを生成したり、テストを作成したり、設計標準を適用したり、その他多くのことができるようになります。

簡単にいうとAPIの仕様書になります。
ただ仕様書という枠に収まらず、仕様書の内容からテストを作成したり、コードを自動生成したり、様々なことができます。

OpenAPIを使用するメリットは以下のようなも