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

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

Railsプロジェクト作成の際に詰まったことメモ bundle install SSL接続エラー

## この記事の目的
色々な記事を調べましたがどれやってもうまくいかず。
たくさんの方が記事出していたのですぐ解決できると思ったんですが、だいぶハマりました。
私の場合の解決方法を備忘録として。

## 前提
– ruby -v
ruby 3.3.2 (2024-05-30 revision e5a195edf6) [x86_64-linux]

– rails -v
Rails 7.1.3.4

– gem -v
3.5.11

## 確認したこと
bundle installの際のこのエラー
“`
run bundle install
Fetching gem metadata from https://rubygems.org/….

Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/ due to underlying error

元記事を表示

Rails – データベースの既存レコードからバリデーションエラーのデータを探す方法

# 概要

Rails的にはバリデーション違反なのだが、いちどデータベースにレコードが記録されてしまい、そのまま残っているデータがあるという場合がある

それを見つける方法

単に `instance.validate` するだけで良い

## コード例

examines テーブルの全てのレコードのバリデーション違反状態を確認する例

“`rb
Example.all.each do |example|
example.validate

if example.errors.present?
p example.errors.full_messages
end
end
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

元記事を表示

Rails + Enumerize – ActiveRecordで データベースの値が nil が返ってくる

# 問題

たとえばこんなクラスがある時

“`rb
class Example < ApplicationRecord extend Enumerize enumerize :name, in: %i[alice bob carol] end ``` データベースの値が enumerize の定義に対して不正だと ( たとえば `exampmes.name` に `david` という値があると ) 結果に nil が返ってくる ```rb Examinee.find_by(name: 'david').name # nil ``` # 原因 Enumerize の挙動のようだ モデルで enumerize の行を消したら元の値が返ってくるようになった ```rb Examinee.find_by(name: 'david').name # david ``` # チャットメンバー募集 何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。 https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JX

元記事を表示

Rubyで任意時刻のDatetimeインスタンスを作りたい/既存Datetimeインスタンスの値を変えたいときの便利な方法

例えば、2024-06-08 12:00:00を作りたい場合

“`
# 今日は2024-06-08の場合
Time.current.change(hour: 12)

# 今日は2024-06-08ではない場合
Time.zone.parse(‘2024-06-08 12:00:00’)
“`

Rails API公式
https://apidock.com/rails/DateTime/change

元記事を表示

Rails・Rubyでbenchmarkの使い方について

お疲れ様です。

今日は「Rails・Rubyでbenchmarkの使い方について」について部分いたします。

Ruby on RailsとRubyを使用してベンチマークを取るための基本的な方法について説明します。Benchmarkモジュールを使用すると、コードの特定の部分の実行時間を測定することができます。

# 基本的な使い方
RubyのBenchmarkモジュールを使用して、ブロックの実行時間を計測する方法は以下の通りです。

“`ruby
require ‘benchmark’

Benchmark.bm do |x|
x.report(“sleep 1:”) { sleep(1) }
x.report(“sleep 2:”) { sleep(2) }
end
“`

上記のコードでは、sleepメソッドを使って異なる長さの遅延を挿入し、その実行時間を計測しています。出力は次のようになります。

“`
user system total real
sleep 1: 0.000000 0.000000 0.00

元記事を表示

Formオブジェクトの記述方法

丸3日データベースに保存されない状態に悩んだ部分です。
モデル間の関係性、記述方法、メソッドの使い方がややこしかった部分です。
モデルファイルに絞ってまとめます。

購入機能があるアプリで**購入すると配送先情報がorderテーブルへ、購入履歴がpurchaseテーブルへそれぞれ保存される**状態を目指します。

#### 1.model配下にorder_fomr.rbを作成
このファイルにorder.rbとpurchase.rbに記述するべきカラム、バリデーション、保存する処理を記述していく。
“`ruby:order_form.rb
class OrderForm
include ActiveModel::Model
end
“`
新たなクラスを定義し、**include ActiveModel::Model**でform_with や render などのヘルパーメソッドの引数として扱え、バリデーションの機能を使用できるようにする。

#### 2.それぞれのモデルで扱うカラムをすべて記述
“`ruby:order_form.rb
class OrderForm

元記事を表示

Dev ContainerでRuby on Railsの開発環境構築

# 概要
いつもHTMLやJavascriptばかりで
環境構築の必要な作業をやったことがなく
今回Ruby on Railsのチュートリアル用でDockerに
チャレンジしてみました。

# やったこと
## 拡張機能のインストール
本題はrailsの勉強なのでなるべく早く環境構築できるように
VSCodeの拡張機能であるDev Containerをインストール

## フォルダの作成
まずは作業用フォルダ
“`
sample_app
“`
を作成し移動します。
移動後
“`
.devcontainer
“`
フォルダを作成しそこにファイルを置いていきます。

## docker-compose.yml
チュートリアルで開発用のファイルは配布されているのですが
そこも今回は勉強を兼ねて自分で書いてみました。
その際色々調べてみたのですが
チュートリアルをするには過剰かなと思ったので必要そうな
ところだけピックアップしました。

“`docker-compose.yml
version: ‘3’

services:
web:
build:
conte

元記事を表示

謎の挙動をするFactoryBotの作り方

しょーもなく、はたまたネタでもないですが、1時間弱苦しめられたので記す

# 事象

下記コードを実行したときに、`user_id`と`group_id`は同じIDになる想定だったが、なぜか違う値になり混乱していました(変数名は適当なんで気にしないでください)

“`ruby
create(:table_name, user_id: user.id, group_id: user.id, other_group_id: other_group.id)
“`

しかも面白いことに、`group_id: ‘xxx’`と入れてもそれは反映されず、なぜか数値が返ってきます。はて??????

# 調査内容

## コードをデバッグ

とりあえずprintデバッグを進めると、`other_group.id`の値がでていることがわかりました(?)

はて???????

## DDLを調べる

テーブル構造が間違えているのでは?と思い調べましたが大丈夫でした。はて?

## モデルを調べてみる

あーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

元記事を表示

【Rails】formオブジェクトでForbiddenAttributesErrorが起こる原因と対処方法

## はじめに
formクラスにparamsを渡してsuperで初期化しようとした際にActiveModel::ForbiddenAttributesErrorになる原因をこの記事で解明していこうと思います。

## 忙しい人向けの結論
paramsに対して`.permit`していないからです。
formクラスにparamsを渡す前に、controller側でparams.permit(:〇〇)とするとエラーが起きなくなります。
よければその理由を以下の文章を通してより深く理解してみてください!

## なぜForbiddenAttributesErrorになるのか?

### コード例
コード例は以下のような状況を基に作成されています。
– 醤油ラーメンを注文しようとしている
– このラーメン屋では、醤油ラーメンと豚骨ラーメンしか売っていない
– 醤油ラーメン・豚骨ラーメン以外の注文が来ないようにバリデーションをかけたい

“`
# 醤油ラーメンの注文がparametersで飛んでくる
#“醤油”} p

元記事を表示

Rails – マイグレーションで値を持つ列を間違って削除してしまわないように事前にチェックする例

# 例

“`rb
def up
if Example.where.not(foo_column: nil).exists?
raise ‘Example.foo_column has some value’
end

remove_column :examples, :foo_column
end

“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

元記事を表示

【Rails6】紐づいた商品の数が多い上位10件のタグ名を並べたい

# はじめに
タグを表示する際のモデルの記述がよく分からなくなったので、確認も兼ねてまとめていこうと思います。

# 作成手順
登録数が多い順にタグを並べて、こんな感じの左ナビを作成します。

![2024-06-06タグ左ナビ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762011/f597e254-6b36-75a6-1bf5-4b4e39a4670c.png)

## tagとitem_tagの関連付け
タグと商品との関連付けはこんな感じです。

![2024-06-06タグ検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762011/bb23fec9-c24a-9d39-b7e3-cbb7b9b47d5e.png)

商品に複数のタグを登録できるようにしたかったので、間に中間テーブルを挟んで実装しています。
今回はタグの登録方法などに関しては省略します。

https://qiita.com/ki_8

元記事を表示

rails、importmapの初めの一歩はstimulus

railsのimportmapについて理解し始めたころ、javasprict/controllersはなんだろうという疑問がでてきました。
これまで、controllersというフォルダは使ってこなかったため、使い方もわからず、色々調べた結果stimulusに行きつきました。
これが、controllersを理解するキーでした。

## stimulusとは
stimulusとはjavascriptのフレームワークです。
以下[公式参考](https://stimulus.hotwired.dev/handbook/introduction)
“`
Stimulus は、控えめな目標を掲げた JavaScript フレームワークです。他のフロントエンド フレームワークとは異なり、Stimulus は、単純な注釈を使用して JavaScript オブジェクトをページ上の要素に接続することで、静的またはサーバーでレンダリングされたHTML (「既存の HTML」) を強化するように設計されています。

これらの JavaScript オブジェクトはコントローラーと呼ばれ、Stimulus

元記事を表示

本番環境で、エラーが発生した時の修正フロー

# はじめてのデプロイ
早速エラーが出て苦戦したので、
エラーを修正する手順をまとめておきたいと思います。

# 修正フロー
![スクリーンショット 2024-06-06 21.35.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/ce1d77ee-5b43-db8b-dacc-6bed3b6dc024.png)
上記のエラー画面が発生、この画面の場合Railsのエラーの可能性が高いため以下のコマンドを実行しRailsのログを確認します。

“`
[ec2-user@ip-172-31-18-108 go_out_planning]$ $ sudo tail -f log/production.log
“`

ログなどでエラーの原因を特定したら、該当の箇所を修正します。
その後、Cloud9のターミナルからGitHubにpushします

“`
ec2-user:~/environment/アプリ名 (main) $ git add .
ec2-user:~/environm

元記事を表示

自作WEBアプリのプロモーション(1)

## 自作WEBアプリのプロモーション(1)
この記事を見て下さりありがとうございます!
ここでは自分のアプリの紹介またこれからの変動をブログのようにつらつら書いていくつもりです。

## OurTime
https://ourtime-2e5710d3aa7e.herokuapp.com/

簡単に1日のスケジュールを作りみんなに共有!
このサイトでは自分の1日のスケジュールを作成できるだけではなく、他の人に共有また他の人のスケジュールの閲覧が可能です。

## 現状
現在はXにてアカウントを作りそこで発表している状況です、けどやっぱ新しく作ったアカウントですしImpressionsの数も一桁だしもちろんアプリのユーザー数も増えてはないですねー

https://x.com/jzl8VrML4ECZg52

(一応僕のXのアカウントのリンク張っときます)
今のところ広告を張りたいなとは考えているのですがいかんせんお金がないので少し先の話になりそうです。

もし暇があればOurTimeにアクセスしてみてください!Xのフォローもしてくだされば泣きながら感謝します!

いちいちサイトに行く

元記事を表示

【Rails6】ちょっとだけややこしかったタグ検索機能の実装

# はじめに
商品に紐づけるタグの検索機能を作成しました。

その際に、商品との関連付けや公開/非公開への配慮など、考えることが多くて頭がこんがらがってしまったので、実装した内容を覚えているうちにまとめておこうと思います。

# 前提
ショップが商品を持っていいて、商品には複数のタグを登録できるという形になっています。

![2024-06-06タグ検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762011/fd2b0d97-fedb-f5fe-28bb-103f52ae6257.png)

:::note warn
このER図に乗せるのはうっかり忘れていましたが、ショップ(Shop)は退会機能があり、商品(Item)は公開/非公開を指定する機能があります。
ここが、今回作成するタグ検索機能においても、少しだけややこしくなるポイントになってきます。
:::

ちなみに、タグのイメージとしてはこんな感じです。

![2024-06-06タグ検索2.png](https:

元記事を表示

【Rails6.1】kaminariを使ったページネーションのレイアウトとか

# はじめに
GemのkaminariとBootstrapを使って、ページネーションのレイアウトを考えてみました。
レイアウト自体はほとんど参考記事をそのまま使ったような形になります。
それにプラスして件数を表示したかったのと、コントローラからデータを渡すときに躓きがちなデータの呼び出し方についても一緒にまとめていきます。

ちなみに私の作業環境では、
Rails 6.1
Bootstrap5.3
を使用しています。

# 手順
私が作りたかったのはこんな感じのページネーションです。
これを作ったときの流れをお話します。

![2024-06-06ページネーション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762011/86197b60-89c1-679a-f56f-e4f1af580d93.png)

## Bootstrapを使う
kaminariにBootstrapを適応する際、参考にさせていただいた記事がこちら。

https://qiita.com/rio_t

元記事を表示

AWS ECSにデプロイしたRailsが、特定のページでシャットダウンした際の対応まとめ。mini_racerのセグメンテーション違反

## 先に結論

JSランタイムのGemのmini_racerが何故かAWS ECS(Fargate)の環境下でセグメンテーション違反を起こし、Rails全体をクラッシュさせていた。
mini_racerを使わずに、nodejsを使うことで回避した。

## 症状
– 特定のページでいきなりPumaが落ちる
– AWSのECS環境でのみ落ちて、ローカルだと再現しない
– Fargate(Dockerコンテナ)を利用

## ログ
ログの最新はこのような記載…何が原因かもよくわからずにいきなりpumaが落ちていることが分かる。
“`
2024-06-03T08:14:48.983Z 7fbb3194d000-7fbb3194e000 r–p 00029000 103:00 567812 /lib/x86_64-linux-gnu/ld-2.31.so
2024-06-03T08:14:48.983Z 7fbb3194e000-7fbb3194f000 rw-p 0002a000 103:00 567812 /lib/x86_64-linux-gnu/ld-2.31.so
2

元記事を表示

RubyKaigi 2024で発表されたRSpecテストコード生成ツール Omochi についてまとめてみた

# はじめに
私は[株式会社エル・ティー・エス リンク](https://lts-link.com/)でRailsエンジニアをしているysk_ymdyと申します。
担当サービスは、IT人材と案件のマッチングプラットフォーム [アサインナビ](https://assign-navi.jp/)です。

先日「RubyKaigi 2024」に参加し、たくさんの学びや気づきを得ることができました。
その中でも@mikiko_bridgeさんさんが発表された Omochi というgemが、私含めRailsで開発するエンジニアにとって大変役立つものなのではと思い、共有させていただきます。

https://github.com/mikik0/omochi

# Omochiってどんなgem?
ひとことで言うと、RSpecを導入しているRailsアプリケーションに対して、LLMを使ってテストコードを自動生成してくれるgemです。

Railsで開発する際、テストコードの作成は手間がかかったり抜け漏れが気になっ

元記事を表示

RailsのDeviseで複数のモデルを使っている際に、メールテンプレートをそれぞれで変更する方法

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

RailsでDeviseを利用している際に、複数のモデルでDeviseを利用したいという場面があると思います。
例えば、一般ユーザーであるUserモデルと企業ユーザーであるCompanyモデルでDeviseを利用したいという場面です。

その際に、複数のモデルにDeviseを導入することはできますが、メールアドレス認証のメールのテンプレートを、それぞれのモデルごとに変更したいということがありました。

その際に、調べてみてもあまり情報が出てこなかったので備忘録としてまとめておきます。

この記事の構成としては以下のようになっています。

1. Userモデルのメールテンプレートを設定する
2. Comanyモデルのメールテンプレートを設定する

# Userモデルのメールテンプレートのカスタマイズ方法
調べれば情報が多く出てきますので、詳細

元記事を表示

Rails7 + Bootstrap + Turboでページ遷移の際にスムーススクロールを解消したい際の設定

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

タイトルの通りですが、Rails7 + Bootstrap + Turboでページ遷移の際にスムーススクロールが意図せず設定されてしまっている際に、スムーススクロールをオフにしたい際の設定方法です。

# 環境など
Ruby:v3.2.3
Ruby on Rails:v7.1.3
Bootstrap:v5.3
Turboを利用

# Bootstrapの導入

以下の記事を参考にしてBootstrapを導入しました。

https://qiita.com/arata0520/items/4330c2be8740bc560390

# スムーススクロールをオフにする方法

Rails7でアプリケーションを作っておりTurboをオンにした状態でBootstrapを導入し他のページへ遷移したところ、自動的にスムーススクロールが発動していました。

元記事を表示

OTHERカテゴリの最新記事