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

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

railsのemail_fieldのバリデーションが効かない

## 発生した事象
フォームヘルパーのemail_fieldにはバリデーションがあります。
email形式でない文字を入力した際に「メールアドレスに「@」を挿入してください~」というような文言が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/0a58c8f7-177e-8c9a-e6dd-3e7369cd399b.png)

該当コード
“`erb

<%= form.label :name, style: "display: block" %>
<%= form.text_field :name %>
<%= form.label :email, style: "display: block" %>
<%= form.email_field :email %>
<%= form.submit %>

“`

この

元記事を表示

【RSpec】2次元hashでincludeマッチャを使うときの注意点

## 直面したエラー
“`terminal
$ docker-compose exec api bin/rspec –only-failure
Failure/Error:
expect(JSON.parse(response.body)).to include({
‘user’ => {
‘id’ => user.id,
‘user_name’ => user.user_name,
‘email’ => user.email,
}
})

expected {
“user” => {
“created_at” => “2024-05-29T10:00:43.356+09:00”,
“deleted_at” => nil,
“email” => “test@gma

元記事を表示

【個人開発】管理栄養士国家試験対策サービスを開発しました

# はじめに
初めまして、[よしき](https://x.com/eiyou_quiz)と申します。
今回、管理栄養士国家試験対策サービス「栄養士マスタークイズ(eiyoushi-master-quiz)」を開発しました。
初めての記事執筆なので拙い点も多いかと思いますが、その点何卒ご了承ください。

もしよろしければ最後までご覧ください!

# サービス名 : 栄養士マスタークイズ

▼ サービスURL
https://eiyoushi-master-quiz-1d4150fdbd38.herokuapp.com/

▼ Githubリポジトリ
https://github.com/Urubu495/eiyoushi-master-quiz

## サービス概要
このサービスは管理栄養士国家試験の対策をサポートする学習支援アプリです。
過去の試験問題を利用してユーザーに出題し、試験対策のための学習をサポートします。

### サービスを作成した背景
このサービスを作った理由は、私が管理栄養士国家試験の試験勉強をしていた頃、勉強する際には基本的に参考書(主に過去問集)を利用して勉強し

元記事を表示

Ruby breakとthrow&catch

## Rubyのネストされたループでのbreakとthrowの使い方

今回は、ネストされたループで特定の条件を満たしたときにループを脱出する方法の`break`と`throw&catch`の2つの違いを紹介します。

### break

`break`は、内側のループのみを脱出する際に使用します。外側のループは続行されるため、全ての組み合わせが試行されるまで処理が続きます。

以下のコードでは、`vegetables`の配列と`amounts`の配列をそれぞれシャッフルしながら繰り返し処理を行っています。`vegetable`が`’onion’`で`n`が`30`のときに`break`を使って内側のループ(amounts)を脱出しますが、外側のループ(vegetables)は続行されます。

“`ruby
vegetables = [‘cabbage’, ‘onion’, ‘eggplant’]
amounts = [10, 20, 30]
vegetables.shuffle.each do |vegetable|
amounts.shuffle.each do |n|

元記事を表示

【Rails7】WebアプリにGoogleアカウントでログイン

# はじめに
Railsで開発中のWebアプリにGoogleアカウントでログイン出来るようにしたので、
記憶の整理を含めて記事に記述していこうと思います。

# 1.開発環境
MacOS
Ruby:3.2.3
Rails:7.0.8
Postgresql:16

# 2.事前準備
https://zenn.dev/yoiyoicho/articles/c44a80e4bb4515
上記の記事を参考にGoogle Cloud Platformに登録してAPIの設定を行い、クライアントIDとクライアントシークレットの準備をします。

# 3.事前知識(知っている方はスルーで大丈夫)
事前知識としてChatGPTから引用しながら以下にまとめます。
仕組みを学び、処理の流れを理解するとエラー発生時に何が原因か判断出来るようになり、沼りにくくなるので事前知識はとても大事だと個人的には思っています。下記を見て分からない箇所があればChatGPT等のAIと認識の摺り合わせをするのもおすすめです。

### OAuth
OAuthは、アクセス権限の認可を行なうためのプロトコルで、アプリがユーザーの

元記事を表示

Ruby on rails の環境構築方法(初心者用)

# Ruby on rails の環境構築方法
(初心者向け)自身の備忘としてアウトプットしています。

### 1.環境構築の準備
ターミナルにて環境構築の準備を行います。
Command(⌘)とスペースバーを同時に押すと、以下のようなSpotlightというウインドウが開くので、「ターミナル」と検索してアプリを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984055/fc6e9eda-4266-a1fc-d9fe-4e647124abca.png)

### 2.Rubyのバージョンを確認する。
Rubyのバージョンを確認してみましょう。ターミナルを開き、以下のコマンドを実行してください。
“`
rbenv versions
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984055/d13dd8fa-0b55-804d-42b9-93e2625121a

元記事を表示

【DeviseTokenAuth】パスワード変更時に変更通知メールを送信する方法

## 設定を記述

設定を記述する。

“`rb:config/initializers/devise.rb
Devise.setup do |config|
# …
config.send_password_change_notification = true
end

“`

## メール内容の変更

メール内容を変更する。

“`erb:app/views/devise/mailer/password_change.html.erb

<%= t(:hello).capitalize + '、' + @resource.name %>さん。

<%= @resource.email %>のパスワードが変更されました。

“`

## 参考ページ

https://github.com/heartcombo/devise/blob/a259ff3c28912a27329727f4a3c2623d3f5cb6f2/lib/generators/templates/devise.rb#L134

https://github.com/he

元記事を表示

【個人開発】お酒&おつまみの組合せを情報共有、AIで組合せ提案できるアプリを作りました

# はじめに
はじめまして、ゆうと(@bitter-or-sweet)と申します。
異業種からエンジニアに転職するため、プログラミングスクールで学習しています。
先日、お酒&おつまみの組合せを情報共有、AIで組合せ提案できるアプリをリリースしましたので、紹介させていただきます。

## 目次
[1.自己紹介](#1-自己紹介)
[2.アプリの紹介](#2-アプリの紹介)
[3.技術構成](#3-技術構成)
[4.こだわった点](#4-こだわった点)
[5.今後について](#5-今後について)
[6.おわりに](#6-おわりに)

# 1.自己紹介
工業高等専門学校卒業後、4年間電気設備工事の施工管理をしていました。
学生時代、専門科目としてC言語があり、初めてプログラミングを経験しましたが、基本についてしか学ばず、あまり実用性を感じることができませんでした。
就職後、業務改善を目的とした施工管理アプリ、社内システムなどに触れ、ITがどのように社会に貢献しているのかを実感しました。その後興味を持ち始め、利用者側ではなく開発者側として関わりたいと考え、転職を決意し、学習を始めました。

#

元記事を表示

bin/devでデバックができない時の解決方法

## 問題
Rails7から’webpacker’ではなく、’foreman’を用いてCSS・JavaScriptの最適化を行うようになりました. そのため、CSS・JavaScriptの最適化が必要であれば、`bin/dev`でサーバーを立ち上げることになりますが、この’foreman’は、標準入力を適切にハンドリングできないため、`byebug`などのデバッグツールを利用しようとすると入力できません.

## 解決方法

– ForemanとRailsサーバーを別々に実行.

Procfile.devから、以下を削除し、別々に起動します.

“`diff_c:Procfile.dev
– web: bin/rails server -p 3000
“`

“`
$ bin/rails s
$ bin/dev
“`

docker利用時には以下のような感じで docker-compose.yml を記述すれば大丈夫です.

“`yml:docker-compose.yml
version: ‘3.8’
services:
db:

~ 省略 ~

web:

元記事を表示

Rails7以前と以降でwhereなどで取得したクエリ結果を任意の順序にする方法

Rails7からクエリ結果を任意の順序にする便利なメソッドが追加されていることに気づいたので、Rails7以前と以後での方法をまとめました.

## 結論
* Rails7以降 – 新たに追加された`in_order_of`を使用.
* Rails7以前 – gem [‘order_as_specified’](https://github.com/panorama-ed/order_as_specified)の`order_as_specified`を使用.

## 問題
Active Recordを用いて、以下のようにidの配列の順番にソートしたいケースがある.

“`rb
users_id = [2, 4, 6, 3, 1]
User.where(id: users_id)
“`

しかし、これでは配列に格納された順番に関係なく、自動的にソートされてしまう.

## 解決方法

### Rails7 以前
gem [‘order_as_specified’](https://github.com/panorama-ed/order_as_specified)の`ord

元記事を表示

ECサイト開発におけるdestroy_allの使用例

# はじめに
チーム開発が無事終了し、振り返りに躓いたところをアウトプットしています。
今回はECサイトを作成する中で、カートの中身を空にするために、destroy_allを使用しました。
検索しても良い記事が見当たらず…実装するのにものすごく時間がかかってしまったので使用例を紹介しようと思います。

# destroy_allとは

Railsにはdestroy_allというActiveRecordのメソッドが用意されています。

ActiveRecordとは

Ruby on Rails で使用されるデザインパターンの一つです。
主な機能は下記です(まだまだあります)
①データベーステーブルとオブジェクトのマッピング
②CRUD操作のサポート
③バリデーション

今回は削除機能なので、②のCRUD操作サポートになります!

destroy_allは文字通り指定したレコードを全て削除することができるメソッドです。
例えば、データベース上の全てのItemを削除する場合は以下です。

“`
Item.dest

元記事を表示

[Rails7]application.bootstrap.scssの変更が反映されない

## 目的
Rails7でbin/devコマンドでサーバーを起動させた際に、エラーが起きたのでその解決方法を共有しつつ備忘録として残します。

## 開発環境
– rails 7.0.4.3
– ruby 3.1.2
– Bootstrap 5.3.3
– Popper.js 2.11.8

## 解決方法
#### 事の始まり
下記の記事を参考にRails7にBootstrap5を導入しました。

https://qiita.com/PJZ9n/items/03341f942c2c84713c99

無事bootstrapの導入が終わって動作確認をしていた際に、`application.bootstrap.scss`の変更がブラウザに反映されないことに気づきました。
これはおかしいと思って色々調べたり、試してみました。

#### Rails7では`bin/dev`を使う
投稿者は開発途中でrails6からrails7にアップデートしました。
アップデート後も`rails s`コマンドで何も問題なくサーバーが起動されていたので、そのまま`rails s`コマンド

元記事を表示

ActiveStorageを使用しての画像のリサイズがうまくいかない時

# はじめに
チーム開発が無事終了し、振り返りに躓いたところをアウトプットしています。
今回は正しくActiveStorageを導入し、リサイズの記述をしているはずなのに、リサイズされない現象が起きました。
解決方法をまとめています。

# ActiveStorageの導入手順
まずはじめに、ActiveStorageのインストールを行います。

“`
$ rails active_storage:install
“`

インストールが終わるとdb/migrateディレクトリ内にActiveStorageのマイグレーションファイルが追加されます。
これをmigrateします。

“`
$ rails db:migrate
“`

ActiveStorageを使用して画像表示をするためには、どのモデルで画像を使用するのか宣言する必要があります。
今回はItemモデルに記述していきます。

“`app/models/item.rb
class Item < ApplicationRecord has_one_attached :item_image end ``` これでA

元記事を表示

AWS FargateでRakeタスクを定期実行する

## 実現したいこと
– 従来はWheneverでcron定義を自動生成し、EC2上で定期バッチを実行させていた
– EC2からFargateへのインフラ移行に際して、定期バッチもFargateで実行できる形にしたい
– 定義の反映はアプリケーションのCI/CDに載せて自動化したい
(「手作業でECS Schesuled Tasksを編集する」のような形は避けたい)
– 定義は設定ファイルで構成管理したい
(「スケジュール追加スクリプトを実行する」ような形は避けたい)

## 選択肢

1. CloudFormation でEventBridgeルールの定義を行い、CircleCI 内で`aws cloudformation deploy` を実行する
2. [ecschedule](https://github.com/Songmu/ecschedule)(ECS Scheduled Task 設定を管理する gem)を使い、circleci 内でコマンドを実行する
3. [Elastic Whenever](https://github.com/wata727/elastic_wh

元記事を表示

新規投稿機能

# はじめに
2024年2月からプログラミン学習を始めたばかりなので間違ったことを記載している可能性もあります。間違っている部分やアドバイスがありましたらご指摘していただけたら幸いです。

また、今回の記事は以下の記事の続きになっています。

https://qiita.com/sslevel5/items/74c5a92ae30e4d991778

## 前提
ruby
rails
gem device

上記の環境で作成します。

## 実装

今回は顧客側で投稿をする際に使用するジャンルの追加・編集ができるよう管理者側にジャンル投稿機能を実装したいと思います。

### テーブルの追加
Model名は大文字から始まる単数形になります
今回は投稿のジャンル名をtitileカラムとして作成をします。

“`
rails g model Genre title:string
“`
マイグレーションファイルを確認し少し編集します。
“`〇〇〇〇〇〇〇〇_create_genres.rb
class CreateGenres < ActiveRecord::Migration[7.1

元記事を表示

Railsでコードを書く時に気をつけること

# 前提
* 既存のコードに合わせなくて良い、良い状態を考えて作ること

## 一般的なチェック
* メソッドに ! をつける場所は適切ですか
* Aws::SQS::Client のテストは instance double を使わずに、AWS SDK for Ruby を利用
* raise した エラーは 明示的に capture せずとも Sentry が自動で拾ってる可能性を考慮

## rspec

### subject の命名
“`rb
# context など rspec 命名と被るものを利用している部分があるが避けたい
subject(:context) { described_class.call }
# 一般的には result や outcome などが推奨される。
subject(:result) { described_class.call }
“`

### 時間停止系処理

“`rb
# travel_back を忘れがちなのでブロックで書く
travel_to Time.zone.local(2024, 5, 25, 10, 0, 0)

元記事を表示

[Rails7] Popper.js Popper__namespace.createPopper is not a function エラー解決方法

## 目的
Rails7で後からbootstrap5を導入しました。
その際にPopper.jsのエラーにハマったのですが無事解決でき、記事が少なかったので備忘録として投稿します。

## 開発環境
– rails 7.0.4.3
– ruby 3.1.2
– Bootstrap 5.3.3
– Popper.js 2.11.8

## Bootstrap5導入方法
rails7で後からBootstrap5の導入をしたい方はこちらを参考にしてください。

https://qiita.com/PJZ9n/items/03341f942c2c84713c99

投稿者はこの記事を参考にしてBootstrap5を導入する途中でPopper.jsのエラーにハマりました。

## エラー内容
ブラウザでBootstrapのjavascriptで動く部分の動作確認をしていたら、下の写真のようなエラーに遭遇しました。

エラー名:`Popper__namespace.createPopper is not a function`

![スクリーンショット 2024-05

元記事を表示

【DeviseTokenAuth】メールアドレス変更時に古いメールアドレスに変更通知メールを送信する方法

## 設定を記述

設定を記述する。

“`rb:config/initializers/devise.rb
Devise.setup do |config|
# …
config.send_email_changed_notification = true
end

“`

## メール内容の変更

メール内容を変更する。

“`erb:app/views/devise/mailer/email_changed.html.erb

<%= t(:hello).capitalize + '、' + @resource.name %>さん。

<% if @resource.try(:unconfirmed_email?) %>

メールアドレスの変更がリクエストされました。
<%= @resource.unconfirmed_email %>にメールアドレス確認用のメールを送信しています。
内容を確認し、メールアドレスを認証してください。

<% else %>

メールアドレス

元記事を表示

現場で使える ruby on rails 5速習実践ガイド を読んでみて

# はじめに
現場で使える Ruby on Rails 5速習実践ガイドを読んでみて感じたこと、調べてみたことにまとめました
# 良かったところ
* Railsでかかれているアプリケーションの構築方法だけでなく、どうやって動いているかまで詳しく説明されていて良かった
* テストの重要性やチーム開発の流れについて書かれており、実際に実務をイメージすることができる内容でした
* コードのリファクタリングや共通化に関してもわかりやすく書かれていた
# 学んだこと
### rails7 でのセットアップ
本書はrails5での書き方をされているため、現在(2024/05)使われているrails7での書き方に直す必要がありました
今回は、Dockerでの構築でのセットアップを紹介しようと思います
本書で学ぶ際にセットアップで悩んでいる方がいらっしゃれば、
参考にしていただけると幸いです

dockerでの構築で参考にさせていただいたのは、
Udemyで講座を配信しておられる
かめれおん さんの`米国AI開発者がゼロから教えるDocker講座`です

https://www.udemy.com/c

元記事を表示

睡眠をテーマにした新しいSNS「SwimIn」を紹介させてください

# 自己紹介
2023年の9月ごろにプログラミングと出会い、のめり込み、今まで独学でずっと勉強してきました。運が良かったのもあって、12月ごろに某Web系の自社開発企業に内定をいただき、来年の4月からエンジニアとして働けることが決まっています。
就職活動中にも、ポートフォリオ(勤怠管理アプリ)を作成したのですが、今思い返せば、あまりモダンな開発ではなかったなぁと思います。バニラjavascriptを使って、htmlファイルを複数個用意したり、O/Rマッパーの存在も知りませんでしたから、SQLをゴリゴリにベタ書きしていました。(確かProgateでそのやり方を見たからだと記憶しています)
そこで、本格的に個人開発をしたいと思い、フルスタックな開発に着手し、一ヶ月ほどで「SwimIn」を完成させました。

# SwimInとは?
**友達が寝ているかどうかがわかる**、睡眠SNSとなっています。

  • OTHERカテゴリの最新記事