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

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

【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})([

元記事を表示

[rails7]背景画像が表示されない件

## 目的
rails7でwebアプリを作成している途中で、トップページに背景画像を挿入する際に何をやっても挿入されない事態に陥りました。
その問題の解決記事も少なく少しハマったので備忘録として残したいと思います。

#### 対象者
rails7で背景画像を設定したいけどうまくいかない人

## 開発環境
– Rails 7.0.4.3
– ruby 3.1.2
– bootstrap 5.3.3

## 問題
まず背景画像を表示する際にHTMLとCSSを下のように設定しました。

“`top.html

本文

“`

“`top.css
background-image{
background-image: image-url(‘app/assets/images/background.jpg’);
}
“`

これで表示されると思いきや、全く表示されず。画像の欠片も表示されず。
「まぁHTMLとCSS書くの久しぶりやし、設定が間違っているっしょ。調べれば余

元記事を表示

Ruby on Rails5速習実践ガイドを読んで

# はじめに
現在、webエンジニアに転職すべく、プログラミングスクールで学習をしております。RubyonRailsでのアプリケーション開発のアウトプットに先駆けて、本書を学習しました。ここでは、その感想をまとめていこうと思います。(全部書くのは時間がかかるので、わかりにくかったところや、覚書としておきたいところをまとめて書いております。)

# RubyonRails速習実践ガイドを読んで
本書は、10のChapterに分けて解説されていました。それぞれのChapterごとに読んで学んだことと、理解度をまとめていこうと思います。

## Chapter1:RailsのためのRuby入門
このセクションは、本書の前にRuby自体の学習をチェリー本や、アウトプット課題でこなしていたため、知っているものばかりでした。(理解度:5)
– rubyは万物がオブジェクト
– nilとfalseが偽、それ以外が真。
– nilガード:例えば、`number ||= 10`のように書く。これは「もしもnumberがあればnumber、なければnumberに10を代入した上でのnumber」というよう

元記事を表示

Herokuデプロイ時に Precompiling assets failed. が起きた

### 前提条件
“`markdown: バージョン / スペック
macOS: Sonoma 14.5 / M2
Ruby: 3.3.1
Ruby on Rails: 7.1.3
Tailwind CSS: 3.4.3
daisyUI: 4.11.1
Heroku: 8.11.5
“`

“`markdown: 経緯
1. Ruby on Rails に Tailwind CSS / daisyUI を適応
– $ rails new APP_NAME -c tailwind -d postgresql
2. ローカルでは無事CSSが適応されていることを確認
3. Herokuデプロイ時にエラーが起きた
– Precompiling assets failed.
– Error: Cannot find module ‘daisyui’
“`

【参考資料】
– [Install daisyUI as a Tailwind CSS plugin](https://daisyui.com/docs/install/)
– [Heroku スターターガイド

元記事を表示

【個人開発】試聴効率をアップ!動画に直感的にメモを追加できるアプリを開発しました

## はじめに
こんにちは!kato([@k1997022023](https://x.com/k1997022023))と申します。
この度、「[ViMemo](https://vi-memo.com)」 というアプリをリリースしました!
ViMemoは、動画視聴中に時間軸上で直感的にメモを追加できる機能を提供します。
この機能により、メモ取りが簡単になり、メモに登録されたタイムスタンプをクリックすることで、その時間まで動画をスキップできます。
特に長尺動画では、メモを活用することで視聴効率が飛躍的に向上します。

### サービスURL
https://vi-memo.com
### GitHub URL
https://github.com/n-katou/ViMemo

## 目次
1. [作成経緯](#作成経緯)
2. [機能紹介](#機能紹介)
3. [主な使用技術](#主な使用技術)
4. [構成図](#構成図)
5. [ER図](#ER図)
6. [工夫した点](#工夫した点)
7. [今後の展望](#今後の展望)
8. [終わりに](#終わりに)

## 作成経緯

元記事を表示

ActiveRecord のパフォーマンス関連 Tips

## はじめに
これは ActiveRecord のメモリ節約や処理速度向上等のパフォーマンスに関していくつか調べたり知り得たことを書き留めたメモです。どちらかというと API よりバッチ処理に主眼をおいた Tips になります。
またパフォーマンスを重視する場合、コードの読みづらさだったり、バグを仕込んでしまったりとのデメリットとのトレードオフになることも多いのでその点はご留意ください。

## インスタンス化を避ける
ActiveRecord のインスタンス化はかなり時間の掛かる処理です。
例えば CSV を元に何千何万件の登録を行うような処理で、事前に各レコードに対して ActiveRecord のバリデーションやフックアクション(`before_validation`とか)を通したいことがあります。
この時に毎回 `new` して `valid?` していくとめちゃくちゃ時間がかかりますが、一度初期化したインスタンスにデータだけを上書きして使い回すようにするとかなり早くなります。ただし、使い回すことによる副作用もあると思いますのでその点は十分ご注意ください。

## `e

元記事を表示

Rails viewからcontrollerに値を渡す方法

この記事はプログラミング学習者がコードを書く中で得られた内容を備忘録を兼ねて記事にしたものです。間違った所などあればご指摘頂けると嬉しいです。

## 変数の受け渡しについて
Railsで変数を受け渡す時にcontrollerからviewへ受け渡すというのは良くやります。
これまでもコードを書く中で何度も使ってきました。

“`ruby:merchandises_controller.rb
class MerchandisesController < ApplicationController def index @merchandises = Merchandise.with_attached_image end end ``` ```ruby:index.html.erb<% @merchandises.each do |merchandise| %>


<% if merchandise.i

元記事を表示

Rails7.2をちょこっと試す(少し静かな rails new 編)

# はじめに
Rails 7.2.0 beta1 がリリースされたので、ちょこっと試してみました。

Rails 7.2 では、`rails new` のときに `bundle install` が `–quiet` オプション付きで実行されるようになりました。

## Rails 7.1

Rails 7.1 では、`rails new` を実行したときに `bundle install` が `–quiet` オプションなしで実行されます。
bundle install による出力が表示されます。
“`shell
root@2d5740c8a6b6:/app# rails -v
Rails 7.1.3.3
root@2d5740c8a6b6:/app# rails new sandbox –database postgresql
create

run bundle install

“`

## Rails 7.2

Rails 7.2 では、`rails new` を実行したときに `bundle i

元記事を表示

【個人開発】生成AIを用いた習慣化支援RPGアプリを開発しました⚔️🛡️🪄

## はじめに
こんにちは![MaTTa](https://x.com/RckLVnPtRv61824)と申します。プログラミングスクールRunteq50期生です。
この度、卒業制作として[**「3日目に魔王がいる**」](https://mao-the-3rd-day-front-e8eb3156d3f2.herokuapp.com/)というWEBアプリを開発し、MVP*リリースいたしました!
往年のレトロ RPG の世界観をベースにしており、AIによるオリジナルアバター生成やバトルモード、ショップなど様々なゲームフィケーション要素を通じて**日々の記録の習慣化を支援**します。
開発はまだ続きますが、一旦ご紹介させてください 💡

*Minimum Viable Product: 最小限のプロダクト

:::note info
アプリ開発初学者のため、解釈の誤りや、妥当でない設計を含む場合があります。
ご指摘・アドバイスなどありましたらコメントにお寄せいただけますと幸いです。
:::

## サービスURL
https://mao-the-3rd-day-front-e8eb31

元記事を表示

pry-byebugを使ってRuby on Railsでのデバッグ

Ruby on Railsでアプリケーションを作成するうえで、必ずエラーに遭遇します。そのためエラーを解決する能力というものが、開発を行う上で必須の能力となります。

今回はこのエラーが発生した際に、どうすればエラーを解決できるかという方法についてご紹介します。最初はエラー画面が怖いものですが、エラー対応を身に着けることで飛躍的に成長できるので頑張りましょう!

## 「pry-byebug」の使い方

「pry-byebug」とは?については、下記リンクにて説明があります。気になる方は、こちらをご覧ください。それでは早速ですが、使い方について説明します。

[>> 「pry-byebug」とは?](https://taishi-official.com/2021/05/21/729/#toc1)

### 「pry-byebug」のインストール
Gemfileのgroup :developmentの最後に、以下の追記をすることで使用できます。

“`ruby:Gemfile
group :development do

gem ‘pry-byebug’
end
“`

元記事を表示

【Rails6】ラジオボタンの使いづらさ解消 & Bootstrap5.3を使ったレイアウト調整

# はじめに
Railsを使って学習を進めていると、機能として動いてはいるんだけどなんだか使いづらい…という場面に多々遭遇します。
今回は、絶妙に使いづらかったラジオボタンの使い勝手を、ちょっとだけ向上させたときの内容をご紹介します。

## 基本の記述
form_withでtext_fieldなどを呼び出すときのように、ラジオボタンを作成しようと思うと、以下のような形になります。
“`html:絶妙に使いづらいラジオボタン
<%= form_with model: @item, url: items_path do |form| %>

<%= form.radio_button :is_active, :true %>
<%= form.label :is_active, "公開" %>

<%= form.radio_button :is_active, :false %>
<%= form.label :is_active, "非公開" %>

<% end %>
“`
これでもラジオボタン自体は表示されるのですが、このままで

元記事を表示

【Rails】初心者がform_withを使うときに気を付けるポイント

# はじめに
form_withとは、Railsでデータを送るときに使うヘルパーメソッドです。

https://railsguides.jp/v6.1/form_helpers.html

このform_withを扱う時に、初心者の私が勘違いしていたことや、うっかり忘れてしまいがちだった部分をご紹介します。

## 1. modelで渡している@​listとかって何者なのか
“`html:ビュー
<%= form_with model: @list do |f| %>
<% end %>
“`
form_withで新規登録フォームを表示したり編集用のデータを呼び出したりするためには、オブジェクトに紐づける必要があります。

新しくデータを作りたいときは、
List.new
更新をしたいときはどのデータを編集するか判別するために
List.find(1)
などをこのmodel部分で指定します。

これをコントローラから指定するために、
“`ruby:新規作成の場合
def new
@list = List.new
end

元記事を表示

AL2023内のElastic Beanstalk環境でbundle exec rails c (rails console) する方法

# 結論

“`ruby
gem ‘irb’, require: false
“`

がある状態で、

“`bash
eb ssh
“`

して、`rails c`するならこう。
“`bash
sudo su -c ‘env $(cat /opt/elasticbeanstalk/deployment/env | xargs) su webapp -c “cd /var/app/current ; bundle exec rails c”‘
“`

じゃなくて必要な環境変数を持った状態で`webapp`ユーザになるだけならこう。
“`bash
sudo su -c ‘env $(cat /opt/elasticbeanstalk/deployment/env | xargs) su webapp’
“`

# Gemfileについて
ここはちょっと自信がない部分。
Ruby2.5までは明示しなくても`irb`が利用できたけど、2.6以降はGem化されたらしく、使用するのであれば明示的に書いておく必要があるらしい。
ただ、アプリケーションとして必要なわけではないことが多い

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事