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

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

RubyとRailsのバージョンアップで苦労したこと(Gem編)

依頼いただいて久しぶりに言語とFWのバージョンアップの対応を行ったので、苦労した点などを。

PHP(4->5)などのバージョンアップぐらいしか経験がなかったので不安でしたが、なんとかなりました。

### バージョン情報

#### 元のバージョン

– Ruby
– 2.7.4
– Rails
– 6.1.4

#### アップしたバージョン

– Ruby
– 3.2.2
– Rails
– 7.1.3

### やる前に想定していたこと

– 最近参画したプロダクトで知らない箇所しかないので苦労するだろうなぁ
– メジャーバージョンを上げるから、コードの書き方が変わる箇所も多々あるだろうなぁ
– メソッドとかのDeprecateのWarningとかもすごいだろうなぁ
– 設定とかも大きく変わるだろうから、精査しないといけないな
– Gemとかそのままだと動かないものがあるからバージョンアップ必要だろうなぁ
– Gemもそもそも更新止まっていて、更新できないものもあるんじゃないかなぁ
– リリース後にトラブルがあった時に戻す

元記事を表示

プログラミング教材で作ったチャットアプリに機能追加してみた

# はじめに
[こちら](https://www.techpit.jp/courses/195)の講座でチャットアプリを作成したので、追加のお勉強としてメッセージの削除機能を追加してみました。自分の備忘録を兼ねてやったことをメモ的に書いておきます。

# 環境
“`
OS:MacOS 14.1.1(Sonoma)
Ruby:2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin23]
Vue.js:@vue/cli 5.0.8
“`

# 仕様
* メッセージごとに削除ボタンを表示し、クリックすると該当メッセージが削除される
* 削除対象はチャットにログインしている本人が送信したメッセージのみ
* 他人のメッセージには削除ボタンを表示させない
* メッセージ削除に成功するとメッセージ一覧が再取得され、削除したメッセージは画面から消える

# ルートを設定する
* メッセージ削除のルートを追加します
“`config/routes.rb
resources :messages, only: [‘index’, ‘d

元記事を表示

【Rails初心者】いつものform脱却!Action Textとdatetime_fieldの紹介

こんばんは!
今回の紹介は以下の通りです。
1. Action Text
2. 時間のform(datetime_field)

# 環境
AWS Cloud9
Rails 6系

## Action Text
![スクリーンショット 2024-03-01 231109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677302/c75a7f19-b638-8334-433d-b63891352dcd.png)
普段のformと違い、太字や斜体、箇条書きなどを感覚的に入力できるものです。こちらは導入しないとこのように表示できないため、下にあるURLを参考に導入してください。導入自体は簡単です!

::: note warn
実装時の注意点
Actiontext用のカラムはテーブル作成時に作成しないでください!
モデルに直接書き込みます。
:::

https://autovice.jp/articles/36

## 時間のヘルパーメソッド
カラムのデータ型datetimeにしている場合有効ですが、時

元記事を表示

Railsで特定のコールバックを条件付きでスキップする方法

## 事象

`Rails` アプリケーションにおいて、モデルの `save!` メソッドを使ってデータを生成または更新する際、`before_save` や `after_save` コールバックを用いてデータ更新前とデータ更新後の処理を定義することが一般的です。しかし、特定のビジネスロジックの要件により、`after_save` の処理を条件付きでスキップしたい場合があります。例えば、バッチ処理中には特定のデータ更新後の処理を行いたくない、または特定の条件下でのみ処理を実行したい場合などです。

## 対処法

このような特定の条件下でコールバックをスキップするには、`attr_accessor` を使用してフラグを設定し、そのフラグに基づいてコールバック内の処理を実行するかどうかを制御します。以下はその具体的な実装例です。

“`rb:custom_task.rake
namespace :custom_namespace do
desc ‘特定の処理を実行する’
task custom_task: :environment do
Model.find_each

元記事を表示

form_withのlocal:trueに関して

## はじめに
スクールの課題で、タスク管理アプリを作成しているときに、バリデーションが反映されない事象がありました。Railsのコンソールで、確認するとたしかにバリデーションのメッセージは出るのに、実際にブラウザ画面では出ませんでした。解決したのですが、備忘録として共有させていただきます。修正や追加等ありましたら、コメントいただけるとありがたいです。

## 環境
・MacBookAir 13インチ M1(2020)
・OS:Sonoma 14.3
・メモリ:16GB
・Rails: version 6.1.7.6

## エラーメッセージが出ない
“`Rails
<%= form_with(model: task) do |form| %>
<% if task.errors.any? %>

<%= pluralize(task.errors.count, "error") %> prohibited this task from being saved:

“`
taskの新規

元記事を表示

rails transaction が rollback しないのは マルチデータベースだからかもしれない話

# Rails で意図的に fail させているのに rollback しない!

このようなコードを書いた時には確実に rollback しますが
マルチデータベースの場合は rollback が行われないこともあります。

“`rb
ActiveRecord::transaction do
User.last.update!(name: ‘new name’)
raise ‘hoge’
end
“`

“`rb
class User < UserDatabase end ``` ## トランザクションのスコープ Rails では、トランザクションは特定のデータベース接続に紐付けられ UserDatabase クラスまたはそのサブクラスでトランザクションを開始した場合 そのトランザクションは UserDatabase の 接続先DBでのみ有効になります ## 対象DBにつながっているクラスでトランザクションを開始する ActiveRecord::transaction で開始するのではなく `User.transaction` や `UserDatabase

元記事を表示

activerecord.ja.ymlファイルの便利さ

## はじめに
 Railsで簡単な掲示板サイトを作っていた時に、ページ(今回はプロフィール画面)のカラムが期待通りに表示されておらず、なかなか原因が分からなかった事がありました。
## 環境
ruby 3.14
rails 7.0.3.1
## 目次
事例
activerecord.ja.ymlファイル
別の方法
まとめ

## 事例
 Railsで簡単な掲示板サイトを作っていた時に、profileページが期待通りに表示されませんでした。

![qiita1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726578/8a8764e4-651a-7673-9c44-ea758a58d44d.png)

メールアドレスや氏名がちゃんと表示されているにも関わらず、アバターだけがAvatarと英語表記になってしまっています。

profiles/edit.html.erb
“`

<%= form.label :last_name %>
<%= form.

元記事を表示

Rails7でjQueryを使えるようにする

## 導入手順

importmapにjqueryを追加する

“` text:console
bin/importmap pin jquery
“`

動作確認も含めて以下を追加
“` js:javascript/application.js
import jquery from “jquery”
window.$ = jquery

$(function(){
alert(‘ok’);
});
“`

ちゃんと動いていたらページを更新すると
アラートが表示されます。

簡単だけどimportmapが全然わからないときめっちゃ困ったから書きました。

元記事を表示

Rails7 でbootstrapを使ってModalを動かす

## 環境
* Rails 7.1.3
* ruby 3.2.1
* bootstrap 5.3.2

## 目的
**railsでbootstrapを動かす**

Rails tutorialを終えて、その他にもハンズオン形式のサイトに取り組んでいたらbootstrapを使ったモーダルなどが動作しない・・・
ということでとりあえず動くようになるまで調べた結果を書いていきます。

※間違えていたらマジで色々教えてください

>参考サイト

Rails 7 Modal Forms with Hotwire and Bootstrap

## 新しいプロジェクトを作る
まずはコマンド
“`
rails new modal
“`
Gemfileに必要なgemを書く

“`ruby:Gemfile
gem ‘bootstrap’
gem ‘sassc-rails’
“`

:::note warn
sassc-railsは古いらしい
darts-scssというのがrails7では推奨みたいなので、調べて理解したら記事作

元記事を表示

mysql2::error::connectionError: Access denied for user ‘root@localhost'(using password no)

# エラー
“`
ActiveRecord::DatabaseConnectionError
There are an issue connecting to database with your username/password,username: root
Please check your database configuration to ensure the username/password are valid.
“`

ユーザー名/パスワードでのデータベース接続に問題があります、
ユーザー名: root
ユーザー名/パスワードが有効かどうか、データベース設定を確認してください。

### 出典
deepL

### 気づき
username,passwordが関係してdatabaseに接続できていないらしい。
username,passwordに関係していることと言えばログインかな。
とりあえずログインしてみよう。

ログインしたがエラーが治らない。

# スクロール先にエラーがあった。
“`
mysql2::error::connectionError: Acc

元記事を表示

Can’t connect to local Mysql server through socket ‘/tmp/mysql.sock'(2)

# エラー
ActiveRecord::ConnectionNotEstablished
Can’t connect to local Mysql server through socket ‘/tmp/mysql.sock'(2)

これは、MySQL サーバーデーモン (Unix) またはサービス (Windows) が起動していないことを示しています。
### 出典
https://dev.mysql.com/doc/refman/8.0/ja/connecting-disconnecting.html#:~:text=ERROR%202002%20(HY000)%3A%20Can%27t%20connect%20to%20local%20MySQL%20server%20through%20socket%20%27/tmp/mysql.sock%27%20(2)%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81MySQL%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%83%87%E3%83%BC%E3

元記事を表示

Rspecでモックを使用してテストを書いてみた

## mocksを使用した経緯
テストしたいクラスが、S3バケットへの署名付きURLの発行やCSVの生成などのために複数のクラスとの依存関係にあり、単独でテストをする必要があったため使用しました。

## 参考にした記事
https://qiita.com/k-o-u/items/e6f671a1fc0bf720932d

https://zenn.dev/sa2knight/articles/2388ecadc82b98

## mocksの基本について
ほぼほぼ上記の記事と同じ内容ではありますが、
“`hoge_spec.rb
let(:class_a) { instance_double(ClassA) }
“`
これでClassAのテストダブル(影武者)のclass_aが作成できます。
しかし、このままではこのclass_aはメソッドなどは何も持っていないので情報を付与する必要があります。

“`hoge_spec.rb
allow(ClassA).to receive(:new).and_return(class_a)
allow(class_a).to

元記事を表示

hotwireの学習②

# はじめに
この記事は、hotwireの学習についての備忘録です。

https://qiita.com/youfuku/items/e608683821f03d9a4cfe

前回の記事の続きです。
今回は、主に「Turbo Streams」に絞った内容です。

## 前回からの修正
情報が少ないので、showを使う場面あるっけ?と思いまして、リンクを削除します
“`diff:app/app/views/todos/_todo.html.erb

<%= todo.id %> <%= todo.content %>
– <%= link_to "Show", todo, class: "btn btn-sm btn-outline-primary me-2" %>
<%= link_to "edit", edit_todo_path(todo), class: "btn

元記事を表示

hotwireの学習①

# はじめに
この記事は、hotwireの学習についての備忘録です。

https://qiita.com/youfuku/items/782b0a7f974e2a53d89e

前回の記事の続き(importmap + bootstrap)です。
また、記事が長くなると思われるので、数回に分割する予定です
今回は、主に「Turbo Frames」に絞った内容です。

# hotwireとは
他の記事に詳細が書かれてるので、この場ではさらっとした説明です。
HotwireはRails7からRailsのフロントエンドのデフォルトとなった技術です。
また、複数の機能を統合した相称の名前となります。

– Hotwire
– Turbo
– Turbo Drive    ・・・画面描写を早くする
– Turbo Frames  ・・・部分差し替えを行う(主にgetで利用)
– Turbo Streams  ・・・部分差し替えを行う(主にget以外で利用)
– Stimulus      ・・・rails専用のJS

https

元記事を表示

RailsアプリでVoiceVoxを使った音声読み上げ機能の実装

## 前提条件

– Ruby on Rails 6.x以上
– Dockerインストール済み
– VoiceVoxエンジンがDockerコンテナとして動作中

## VoiceVoxのセットアップ

DockerコマンドでVoiceVoxエンジンのセットアップを行います。

“`bash
docker pull hiroshiba/voicevox_engine:latest
docker run -d -p 127.0.0.1:50021:50021 hiroshiba/voicevox_engine:latest
“`

## Railsアプリケーションの設定

Railsプロジェクト側の設定は主に3つの部分に分かれます。サービスクラス設定、コントローラーからのサービスクラスの呼び出し設定、ビューからコントローラアクションの呼び出し設定です。

### クラスの設定

`app/services/voicevox_service.rb`に以下のようにサービスクラスを作成します。

“`ruby
class VoicevoxService
include HTTParty

元記事を表示

RailsでsasscのLoadErrorが発生した際の解決方法

## はじめに

Railsアプリケーションで、scssファイルにCSSを記述しようとしたところ、以下のエラーメッセージが発生しました:

“`
LoadError in HomeController#home
cannot load such file — sassc
“`

この記事では、このエラーが発生した際の解決方法について説明します。

## 問題の原因

scssファイルにCSSを記述する際、それまで全くCSSを記述していなかったため、scssコンパイル時にsasscが必要とされたが、インストールされていなかったためにエラーが発生しました。

## 解決方法

以下の手順で問題を解決しました:

1. Gemfileにsassc-railsを追加する。
2. `bundle install` を実行してGemをインストールする。
3. Railsサーバーを再起動する。

これで問題が解消され、scssファイルにCSSを記述することができるようになりました。

## まとめ

scssファイルにCSSを記述する際には、sassc gemが必要となります。エラーが発生

元記事を表示

RailsアプリケーションとPostgreSQLの接続問題を解決する

Railsアプリケーションを開発している際、PostgreSQLデータベースへの接続でつまずくことがあります。この記事では、そのような時に役立つ解決策を共有します。

## 前提

RailsアプリケーションからPostgreSQLデータベースへの接続時に次のようなエラーが発生しました。

“`plaintext
ActiveRecord::ConnectionNotEstablished (could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/tmp/.s.PGSQL.5432”?):
“`

このエラーは、RailsがPostgreSQLサーバーへの接続を試みるも、指定されたUnixドメインソケットが見つからないために発生します。

## 解決策

### 1. PostgreSQLサーバーの状態確認

まず、PostgreSQLサー

元記事を表示

【Rails】Mailerのプレビュー機能が表示される流れ(プレビュー機能が動作する経緯)

## Mailerのプレビュー機能が表示される流れ

Mailerを用いて、プレビュー機能(送信メールの確認画面を表示する機能)の処理の流れを理解に苦戦したため、自分用に備忘録として残しておきます。
※ざっくりとした流れだけですので、詳細については割愛してます。

私と同じ境遇の方の役に立てば幸いです。

## 環境
` gem ‘letter_opener_web’`導入済み。

### 1.プレビュークラスの定義
今回は、下記のプレビューファイルを定義しています。
“`Ruby:spec/mailers/previews/article_mailer_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/article_mailer
class ArticleMailerPreview < ActionMailer::Preview def report_summary ArticleMailer.report_summary end end ``` `ArticleMail

元記事を表示

Rails x SQLite x Docker

## 前提
Ruby on Rails SqLite(Railsのデフォルト)の環境を作成
Ruby on Rails Tutorial等の学習目的にサクッと作成できる環境を目指したのが作成動機
ホスト側にRuby関連の環境が存在しない場合の構築手順

## 準備すべきファイル
“`
docker-compose.yml
Dockerfile
entrypoint.sh
“`

docker-compose.yml
“`yml
version: “3.8”
services:
app:
build:
context: .
dockerfile: ./Dockerfile
tty: true
volumes:
– ./:/myapp
ports:
– “3000:3000”
environment:
– TZ=Asia/Tokyo
“`

“`sh
#!/bin/bash
set -e

rm -f /myapp/tmp/pids/server.pid

# RUN MAI

元記事を表示

環境構築 Ruby Rails

## はじめに
Railsを1年以上ぶりに触る過程でいろいろ気づきを得た
以前は勘違いしていた箇所や不要な処理もあったため書き直し

## 前提
HomebrewとxcodeのCommand Line Toolsはinstallされている前提とします。
まだの方は下記記事を参考にinstallしてください

https://brew.sh/ja/

https://qiita.com/SayCheeese/items/1b9db660917049bbad64

## rbenvのインストール
“`shell
# rbenvのinstall (ruby-buildも自動でインストールされる)
# ruby-build:「rbenvのプラグインとしてrbenv installコマンドを使用できるようにする」
1 brew install rbenv

# rbenvが正常にインストールできたか確認
2 rbenv -v

# rbenvでinstallされたRubyを実行するためのPATHを通す
3 echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘

元記事を表示

OTHERカテゴリの最新記事