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

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

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”‘

元記事を表示

Turbo Streamsを利用してモーダル画面表示と他の処理を同時に行った

## 今回実装した処理の流れ
フォーム送ると、①非同期のジョブ、②モーダルの表示、③ジョブ結果を描画するテーブルの表示、の3つの動作を同時に行う機能を実装しました。
この記事ではそのturboのでのモーダル表示部分のみを記録しています。

## 実装したもの
モーダル部分
“`index.html.erb

“`
これだけ。ここをturbo_streamによってパーシャルに書き出したものと置き換えることでモーダル画面を描画させる。

同じページのボタン部分
data: { turbo_stream: true }をつけるとコントローラーでturbo_streamのリクエストとして受け取ることが出来ます。
“`index.html.erb
<%= form_with url: hoge_path(@hoge), scope: :huga, data: { turbo: true } do |f| %>

“`

切り出したパーシャル。bootstrapのモーダルを使っています。
モーダル表示

元記事を表示

strong parameter内で使うmerge以下について

def purchase_record_params
params.require(:purchase_record).permit(:zip_code, :region_of_shipping_origin_id, :city, :street_address, :apartment_name, :tel)
end

というコード内においてどうやらmergeが必要だったことがわかった。

今回はmergeの使い方を考えてみます。

結論mergeとはハッシュとハッシュの結合ということが分かった。


tweet = { name: “たなか”, text: “test”, image: “test.jpeg” }
uid = { user_id: “1” }
tweet.merge(uid)
=> {:name=>”たなか”, :text=>”test”, :image=>”test.jpeg”, :user_id=>”1″}

元記事を表示

Railsの全ファイルをリンター及びフォーマッターで取り締まる

## 概要

RailsでRubocopを使って、Rubyファイルの秩序を保っている人は多いだろう。しかし一方で、その他のファイルの治安はおざなりになっている人も多いはず。

この記事ではRailsによく登場するファイル全てに対して、リンター及びフォーマッターを適用することを目標とする。

## Ruby

[Rubocop](https://github.com/rubocop/rubocop)を使用する。

“`bash
bundle add rubocop rubocop-performance rubocop-rails rubocop-rspec
“`

最低限の`.rubocop.yml`はこんな感じだろうか。

“`yaml
require:
– rubocop-performance
– rubocop-rails
– rubocop-rspec
– rubocop-factory_bot

AllCops:
TargetRubyVersion: 3.2
NewCops: enable
“`

## JS, CSS, HTML

[ES

元記事を表示

Ruby on Railsで動的なフォーム要素を扱う方法

この記事では、Ruby on Railsで動的にフォームの表示を切り替える一例として、サービス選択に応じて特定のフォームフィールドを表示・非表示する方法を紹介します。主に`id`属性の動的な生成とJavaScriptを使用したDOMの操作に焦点を当てて解説します。

## まず結論

問題の解決策は、`id`属性をERBテンプレート内で動的に生成し、JavaScriptを用いてその`id`を持つ要素の表示を切り替えることでした。具体的には、以下のように記述しました。
※<%= service.id %>の部分が重要でした。
※コメントアウト部分はコンソールでログを出しつつ試行錯誤した履歴です。

“`app/views/staffs/registrations/edit.html.erb

元記事を表示

Deviseの内部挙動とActiveRecord::RecordNotFound の解消について

## はじめに

RailsアプリケーションにおいてDeviseを用いたユーザー認証機能のカスタマイズ中に`ActiveRecord::RecordNotFound – Couldn’t find Staff without an ID:`というエラーメッセージが発生しました。この記事では、このエラーがなぜ発生したのか、そしてどのようにして解決に至ったのかを共有します。

## エラーの内容

ユーザー情報の更新フォームを送信した際に、以下のエラーメッセージが表示されました。

“`
ActiveRecord::RecordNotFound – Couldn’t find Staff without an ID:
app/controllers/staffs/registrations_controller.rb:46:in `set_staff’
Started GET “/staffs/edit?id=2” for ::1 at 2024-02-28 00:00:38 +0900
Processing by Staffs::RegistrationsController#ed

元記事を表示

【Rails】画像の上に文字を中央揃えで表示する方法

# 概要
この記事では、Railsアプリケーションにおいて画像の上に文字を中央揃えで表示する方法を説明します。
実装方法の参考として残しておく形なので詳しい解説はあえてつけていません。

# 環境
**Rails**: 6.1.4
**Ruby**: 3.1.2
**Bootstrap**: 4.5

:::note warn
**注意**
Bootstrapが導入されている前提で進めますので、もし導入されていない場合は、Bootstrapを導入するか、その部分を自作のclassで置き換えるかして対応してください。
:::

# 結果
最初にコード実装後の結果を貼っておきます。
実装後に下記の画像のようになっていれば表示されていれば、問題ないと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524017/7c9784cd-155e-26d1-1364-31dea00348b8.png)

# 準備
`app/assets/images`配下に背景画像としたい画像を用意して

元記事を表示

【Rails】ECサイトにおける新着商品の表示レイアウトの整え方

# 概要
この記事では、Bootstrap導入済みのRailsアプリケーションにおいて、ECサイトのトップページに表示する新着商品のレイアウトの整え方について言及しています。

# 環境

**Rails**: 6.1.4
**Ruby**: 3.1.2
**Bootstrap**: 4.5

# 結果
結果として、下記の画像のような感じでレイアウトが整っていれば良いと思います。
今回は割と簡素にしているので、ここからさらにレイアウトを改善して行っていただければと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524017/347c343e-c1fc-44c4-837c-c00704f38442.png)

# 実装

この章では実装の流れについて説明をしていきます。

::: note warn
**注意**
`Contorller`の処理や`View`の処理で使っている変数等々は、適宜置き換えて実装いただくようにお願いいたします。
:::

## Controllerの

元記事を表示

営業時間に基づくタイムテーブル表示機能の実装

Railsアプリケーションにおいて、営業日と営業時間を設定し、その時間内でタイムテーブルを表示する機能を実装します。

## 前提条件

– 基本的なRailsの知識があること(モデル、ビュー、コントローラーの概念を理解していること)

## ステップ1: モデルの設定

まず、`Company`, `BusinessDay`, `CompanyBusinessDay`, `CompanyBusinessHour`のモデルを設定します。ここでは、`Company`モデルが`BusinessDay`を中間テーブル`CompanyBusinessDay`を介して多対多の関係にあり、さらに`CompanyBusinessDay`から`CompanyBusinessHour`への1対多の関係があるとします。

## ステップ2: 営業時間の表示

選択された日付に対して営業時間を表示するためには、選択された日付の曜日に基づいて`CompanyBusinessDay`と`CompanyBusinessHour`から該当するデータを取得します。

“`ruby
def generate_time

元記事を表示

閲覧情報の保存機能の実装(cookie使用)

## 概要
ウェブアプリケーションにおいて、ユーザーが現在閲覧している企業の情報をセッションやクッキーを通じて保存し、画面遷移してもその情報を保持する方法について解説します。この機能は、ユーザーがサイト内で異なるページを訪れる際にも、選択した企業を忘れずに操作を続けられるようにするためのものです。

## 実装ステップ

1. **現在閲覧中の企業情報の設定**
– `viewing_company`メソッドをコントローラに定義します。このメソッドは、セッションまたはクッキーから企業IDを取得し、対応する企業情報をデータベースから検索します。

2. **セッションとクッキーの使用**
– ユーザーが企業を選択した際に、その企業のIDをセッションやクッキーに保存します。これにより、ユーザーがサイト内を移動しても選択した企業情報を保持できます。

3. **ビューでの表示**
– コントローラで定義した`viewing_company`をビューで利用して、現在選択されている企業の情報を表示します。

### コード例

“`ruby
class Application

元記事を表示

mysql2を調べた。

# mysql2をインストールする理由
具体的にわからなかった。今後の自分に頼るしかない。
以下調べた内容。

## mysql2とは?
The Mysql2 gem is meant to serve the extremely common use-case of connecting, querying and iterating on results. Some database libraries out there serve as direct 1:1 mappings of the already complex C APIs available. This one is not.

It also forces the use of UTF-8 [or binary] for the connection and uses encoding-aware MySQL API calls where it can.

### 出典

https://github.com/brianmario/mysql2#:~:text=The%20Mysql2%20gem%20is%2

元記事を表示

OTHERカテゴリの最新記事