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

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

謎の挙動をする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を導入し他のページへ遷移したところ、自動的にスムーススクロールが発動していました。

元記事を表示

【Rails/RSpec】Everyday Rails – RSpecによるRailsテスト入門の要約/感想

# はじめに
* 今回はRSpecの技術書である[Everyday Rails – RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp)を読了したので、その要約と感想について書いていければと思います。

### RSpecとは?
* ruby用に開発された、テスト用の **フレームワーク** のことです。
* RSpecを用いることで、少ない記述で、可読性に優れたコードを簡単に記述することができます。

### 本記事の対象者
* railsのチュートリアルレベルを一通り学び終え、テストコードの学習を始めようと思っている方
* これから [Everyday Rails – RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp) を読む前に要点を掴んでおきたい方
* 実務でRSpecを使うことになり、キャッチアップの上で全体の概要を掴んでおきた方

を対象にこの記事を執筆しました。

ぜひ最後まで閲覧いただけると幸いです。

# よかったとこ

元記事を表示

【Rails】途中からidカラムをuuidに変更する

現在オンラインスクールにてプログラムの勉強をしているとぴ(@topi_log)と申します。
個人開発をしていく中で、idカラムをuuidカラムに変更したくなったので、その備忘録として残します。
初学者ゆえ、間違いなどありましたらそっと教えていただけますと幸いです。

# 開発環境
– WSL2(Ubuntu22.4)
– Docker
– PostgreSQL ver16
– Ruby on Rails ver7.1.3 APIモード
– Next.js ver14

※フロントとしてNext.jsを使っていますが今回はRails側の実装のみ扱います。

# 対象者
Ruby on Railsで開発途中にidをuuidに変更したい方
ここでの変更は、idをuuid型にしつつuuidというカラム名でプライマリーキーに設定することです。

### 変更理由
現在投稿型のアプリを作成していますが、公開範囲の中に「URLを知っている人」があります。
単純なidだとURLを知らなくても推測できてしまい秘匿性が薄れてしまうため、URLとしてidではなくuuidを使用することにしました。

# ER

元記事を表示

【JavaScript】もっと見るボタンの実装

## はじめに
[参考記事](#参考記事)を読みながらjqueryで作成された「もっと見るボタン」を実装したのですが、理解のために自分でJavaScriptのコードに置き換えてみました。

以下のコードを読んで、「nth-child以外でわかりやすく書けないか?」と考えたことがきっかけでした。
“`
$(‘.comment-list:nth-child(n + ‘ + (moreNum + 1) + ‘)’).addClass(‘is-hidden’);
“`
(comment-listの6番目以降の要素に対してclass属性“`is-hidden“`を追加するっていうのはわかったけど…)

### 仕様
– イベントアプリの詳細ページ内でユーザーから送信されたコメントを表示する
– コメントが6件以上の場合に「もっと見るボタン」を表示する
– 「もっと見るボタン」がクリックされるか、コメントが5件以内の場合にボタンを非表示にする。
– コメントはページ内に直近で投稿された10件まで表示する。

## View
今回説明の関係上、Railsのビューに関する説明は省略させて頂

元記事を表示

credencialsに保存した数値とは違う数値が返ってくる問題

# TL;DR
Railsのcredentialsファイルに”0″や”0x”から始まる数字を設定すると、その値が取り出す際に異なる数字に変わってしまう問題が発生する。この原因はYAMLのフォーマットに由来しており、対策としては適切なエスケープを行う必要がある。

# 環境
Rails 7.1.3.2
ruby 3.3.0

# 何があったか
ある日、Railsのcredentialsファイルに次のような設定を行いました。

“`yaml
# credentials
service:
password: 01234
“`

その後、この値を渡しても何故か認証が通らない。
理由を探るために、Railsコンソール(IRB)でこの値を取り出すと、以下のような結果が得られました:

“`sh
irb(main)> Rails.application.credentials.service[:password]
=> 668
“`

### ・・・?

設定したpasswordの値は01234でしたが、取り出すと668という異なる値になっています。

# 原因
わかる人にはすぐ分かる

元記事を表示

【個人開発】Rails API × React アプリの環境を構築しました

## はじめに
こんにちは![MaTTa](https://x.com/RckLVnPtRv61824)と申します。プログラミングスクールRunteq50期生です。先日、生成AIを用いた習慣化支援RPGアプリ「3日目に魔王がいる」をMVPリリースしました。その技術要素を細かく切り出して順に備忘録として残していこうと思います。

今回は最初の行程である**環境構築**についてです。Tailswind CSSの導入もおまけで実施します。

## 参考
### アプリ紹介記事
https://qiita.com/MaTTA_RUNTEQ50B/items/c8eac9251f704164dc9c

### サービスURL
https://mao-the-3rd-day-front-e8eb3156d3f2.herokuapp.com/

### Githubリポジトリ
https://github.com/MaTTalv001/MAO_the_3rd_Day

# 本編ここから
## 作業環境
– MacBook Air 2020 (Apple M1)
– macOS Sonoma 14.4

元記事を表示

【個人開発】せんべろ・はしご酒を愛するあなたに送る居酒屋検索アプリ(ベータ版)

## 初めに
初めまして、脳筋テクノロジーズの[脳筋](https://twitter.com/kinouchi_yuta)です。
みなさんは、せんべろ・はしご酒をご存知でしょうか?

あまり聞き馴染みがないという方に向けて、簡単に説明させていただきます。

せんべろとは「**千円でベロベロに酔える酒場**」などの俗称です。実際には千円でベロベロになることは難しいのですが、お酒が2~3杯+おつまみをちょっと食べられる居酒屋といった感じでイメージしていただければ大丈夫です。

はしご酒はお店を変えながら何軒も飲み歩くことです。**1軒2~3杯で完結するせんべろとは切っても切れない関係**となっています。

私、脳筋は当時大学四年生だった2020年頃にせんべろの楽しさを知り、今でもその魅力に取り憑かれています(コロナの時期は辛かったです)。

そんな私には、はしご酒をするときにこうなったら良いのにな、と思うことがいくつかありました。

## 自分的せんべろ・はしご酒のこうなったら良いな
### ①はしご酒で新しいお店を見つけるのがもう少し簡単になると良いな
次のお店を求めて、あーでもないこ

元記事を表示

Railsであれば便利なコマンドTips

## 環境
Ubuntu20.4
Rails 5.2

## はじめに
railsコマンドのオプションには用意されていないが、あれば便利なコマンドを作成してみました。

## 内容

#### その1

schema.rbの中から、テーブルの一覧を抽出するコマンドです。
app/modelsの配下のファイル一覧を参照してもいいでしょうけど・・・。

“`
$cat ./db/schema.rb | grep create_table | awk ‘{print $2}’ | tr -d [,\”] | nl
“`

このようなイメージの表示となります。

“`結果.rb
1 table_aaaaa
2 table_bbbbb
3 table_ccccc
4 table_ddddd
“`

#### その2

マイグレーションファイルの日付と時間を見やすく成形して表示するコマンドです。

“`
$ls -l ./db/migrate/ | awk ‘{print $8}’ | sed -E ‘s/([0-9]{4})([0-9]{2})([0-9]{2})([

元記事を表示

OTHERカテゴリの最新記事