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

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

【Rails】Ferrumを使ってHTMLをPDFへ変換してみた(wicked_pdfからの移行)

HTMLからPDFを生成する処理が上手く動かなくなってしまったため、
PDF生成ライブラリを`wicked_pdf`から`Ferrum`へ移行しました。
まだまだRails初心者なので、何か間違い等あればご指摘いただけると幸いです!

## HTMLからPDFの変換処理に定番だった`wicked_pdf`

上記の通り、PDF生成機能の実装によく使われていたかと思います。

今回、私はRailsのバージョンを6から7へ引き上げて動作確認を行なった際に、
既存で実装されているPDF生成機能が動かなくなっていることに気がつきました。
なお、既存の実装内容は、viewテンプレート(hogehoge.html.erb形式のファイル)から
`wicked_pdf`を使用してPDFへ変換処理を行っていました。

`wicked_pdf`自体は現在もサポートされているgemですが、
このgemは`wkhtmltopdf`というHTMLをPDFに変換するCLIツールに依存しています。
そして、この`wkhtmltopdf`は、2023年1月にGitHub上からリポジトリがアーカイブされており、開発終了

元記事を表示

[マイグレーション]Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON columnの原因と解決策

# エラー文
テーブル作成のため、モデルとともに作成されたマイグレーションファイルに、型とカラム名を書き、`rails db:migrate`を実行した。

するとターミナルが以下のようなエラーを吐き出した。
“`terminal
xxxxxx@yyyyyy testApp % rails db:migrate
== 20240404111608 DeviseCreateUsers: migrating ================================
— create_table(:users)
rails aborted!
StandardError: An error has occurred, all later migrations canceled: (StandardError)

Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON column ‘profile’ can’t have a default value
/Users/code/Desktop/xxxxx/project_2.0/testApp/db/

元記事を表示

【個人開発】自分以外の「死ぬまでにやりたいことリスト」が見れるサービスを作りました

# はじめに

皆さま、こんにちは、すみ([@sumisumi2000](https://twitter.com/sumisumi2000308)) と申します。
2024 年 1 月 20 日より、オンラインプログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

2024 年 3 月 30 日にリリースしたアプリの紹介と開発の振り返りをまとめました!
アプリについての記事は初めてなので、温かい目で見ていただけると幸いです。

# 目次

1. [作成経緯](#作成経緯)
2. [アプリの紹介](#アプリの紹介)
3. [技術構成](#技術構成)
4. [こだわったポイント](#こだわったポイント)
5. [開発の流れ](#開発の流れ)
6. [改善点](#改善点)
7. [開発を振り返って](#開発を振り返って)

# 作成経緯

通っているオンラインプログラミングスクールで受講生がアプリを出し合おう!というイベントがあります。
そこに向けて、カリキュラムで行っていた Rails の復習と、カリキュラムであまり触れない CSS の学習を兼ねてア

元記事を表示

【個人開発】3D体験!? AIアート × バーチャル個展サービスを作りました【Next.js / Rails API / Three.js】

# はじめに
**みなさん、画像生成AIってご存知ですか?**

ChatGPTの到来から早1年…

AI技術は目覚ましい進歩を遂げています。

例えば…**ホラーチックなイラスト。**
![洋館2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364974/88f36a8a-de95-8a4b-0ccc-1d41c4c3dcec.png)

**モダンな雰囲気のイラスト。**

![AIアプリ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364974/d68b2997-f109-a6e7-42c4-9b807d851bbd.png)

どちらも画像生成AI( **DALL-E 3** )を用いて作成したものです。

**最先端の技術、画像生成AI**。

「**その魅力を、もっと多くの人に“体験”してほしい**」

そんな想いから生まれたのが、**AI個展生成サービス**

「 **Gal

元記事を表示

M2 MacでRubyのバージョンアップ

ruby on rails の環境構築をしようとした際に、
## BUILD FAILED (macOS 14.3 on arm64 using ruby-build )
エラーに当たった。

原因は結局不明のままですが、とりあえず動かしたい人向けに記事を残します。

“`bash

(base) % brew -v
Homebrew 4.2.16
(base) % rbenv
rbenv 1.2.0
Usage: rbenv []

Some useful rbenv commands are:
commands List all available rbenv commands
local Set or show the local application-specific Ruby version
global Set or show the global Ruby version
shell Set or show the shell-specific Ruby version

元記事を表示

Rails – DBの stringe のカラムを integer に変換する

# 例

ネットで調べると `using` を使う例が出てくるが、自分のRails環境では以下だけで良かった

“`rb
class ExampleMigration < ActiveRecord::Migration[7.1] def up change_column :table_name, :column_name, :integer end # ロールバック用 def down change_column :table_name, :column_name, :string end end ``` # チャットメンバー募集 何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。 https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ # プロフィール・経歴 https://github.com/YumaInaura/YumaInaura

元記事を表示

【RSpec】単体テストを完全理解する

# この記事を読んでほしい人
– Ruby on railsのテストコードをこれから学ぼうとしている人
– 単体テストコードで躓いた人
– 単体テストコードを勉強したけど、振り返ってより理解したい人

# この記事のゴール
以下を理解することができます。
– Rspecが何をしているのか
– モデルファイルの重要性
– 単体テストコードを書くには何を見れば良いのか

# Rspecとは
Rspecは、Ruby言語用のテストフレームワークです。
プログラムが**期待通りに動作することを確認するため**のテストコードを書くために使用されます。

>Rspecは「ビヘイビア駆動開発」(Behavior-Driven Development, BDD)の原則に基づいており、開発者が人間が読める形式でテストを記述できるように設計されています。これにより、テストコードが仕様書のように機能し、プログラムの振る舞いについての明確なドキュメントを提供します。

# Rspec何をするのか
モデルの単体テストは、モデルに書いたバリデーションが正しく働いているかを確認します。

### バリデーションの復習

元記事を表示

【Rails】GMOあおぞらネット銀行指定形式CSVエクスポートの実装

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして働き始めて約1ヶ月が経過しました🐣

## 概要
業務内で、GMOあおぞらネット銀行指定形式のCSVファイルをエクスポートする機能を実装する必要がありましたが、
なかなか想定する形式で出力できず苦労したためまとめました✏️

### 環境
– Ruby 3.2.3
– Rails 7.1.3
– Importmap
– Tailwindcss、daisyUI
– PostgreSQL

:::note warn
間違っている箇所や、紹介した方法よりも良い方法があるかもしれませんので、その際は教えて頂けると嬉しいです🙇
:::

## エクスポート・インポートとは?
改めて言葉の定義を確認しておきます。
#### エクスポートとは
> あるソフトウェアで作成・編集したデータを他のソフトが読み込める形式に変換したり、そのような形式でファイルに保存することを指す。[1)](#引用記事)
#### インポートとは
> あるソ

元記事を表示

【個人開発】実務経験1年3ヶ月が個人開発してみた!

# はじめに
実務経験1年3ヶ月のWebエンジニアです!
昔思い描いていたサービスをリリースすることができました!
個人開発の広告を兼ねて投稿します!
※5分で読めます。

# サービス概要
## ガルバとキャバ
https://girlsbar-cabalet.com

![opengraph-image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1798471/2e1856f2-051d-6c01-7bdf-fff07bb5af00.png)
※詳細はサイト見てね

## なぜそのサービスを作ろうと思ったのか
大学4年の頃、同じサークルの友人がキャバクラで働いており、「こんなサービスあったらいいなー」という話をしていたのを聞いていました。エンジニアになって8ヶ月ぐらい経った頃、ふと思い出して作り出しました。

## 主な機能
### 検索機能
現在地から近い順にキャストを検索することができます。
その他にも、県名、最寄駅、金額、店舗の種類、営業しているかどうかなどの任意項目があります。
現在地か

元記事を表示

現場で使えるRuby on Rails5速習実践ガイドを読んで

## はじめに
現場で使えるRuby on Rails5速習実践ガイドを読んだので、感想などをまとめてみました。

## 良かったところ
実際にアプリを作成しながら機能の実装についてしっかり解説してあるので、非常にわかりやすかったです。またチーム開発の流れも書いてあって、未経験の方は実務の流れがイメージしやすいので、とても良いと思いました。

## 学んだこと
#### MVC
Railsでは、アプリケーションの構造や名前付けを、M(モデル)、V(ビュー)、C(コントローラ)の3つの要素に従ってます。

**モデル**とは、データとデータに関わるビジネスロック(アプリケーション特有の処理)をオブジェクトとして実装したもです。データベースの保存や読み込みもモデルが担当する。

**ビュー**とは、ブラウザに表示する画面、HTMLなどのHTTPレスポンスの中身を実際に組み立てる部分です。必要に応じてコントローラからモデルのオブジェクトなどを受け取り、画面表示に利用します。

**コントローラ**は、ユーザーが操作するブラウザなどのクライアントからのリクエストを受け、適切なレスポンスを作成す

元記事を表示

Railsでモデルに書いたメゾットをrails consoleで検証してみた

## この記事を書いた目的
Railsでコードを書く際にモデルにインタンスメゾットを定義をして、コントローラで呼び出すことがよく行われるということを学びました。少し調べてみると、このことは主にファットコントローラを避けることを目的として行われているようです。
ただ、初心者の私からすると「コントローラの流れすら追うのに苦労しているというのに、別の場所に定義したメゾットを呼び出すなんて、わけわかめ!」ということで、実際にコンソールを動かしてどういった動きをしているのか確かめてみました。
## 今回検証したコード
掲示板作成アプリ内のお気に入り登録ができる機能に関わる箇所です。該当のコントローラとモデル内のインスタンスメゾットは下記の通りです。

“`ruby:bookmarks_controller.rb
def create
board = Board.find(params[:board_id])
current_user.bookmark(board)
#…
end
“`
“`ruby:user.rb
def bookmark(board)

元記事を表示

書籍『Everyday Rails』 で学ぶテストファーストプラグラミング

## はじめに
参画予定の案件でRspecを使う機会がありそうなので、予習も兼ねて書籍で基礎から勉強してみました。
本書では、**11章 テスト駆動開発(TDD)に向けて**にて、テストファーストプログラミングを実践できる部分がありました。これが興味深かったので紹介と、今までの開発サイクルと比較してみます。

## 書籍について
#### 学習に使用した書籍
[Everyday Rails – RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp)

#### 書籍詳細
12章で構成されていて、RSpecの基礎知識から学べるような書籍でした。
章を進めるにつれてリファクタリングもしていく感じでした。

目次

“`
1. イントロダクション
2. RSpec のセットアップ
3. モデルスペック
4. 意味のあるテストデータの作成
5. コントローラスペック
6. システムスペックで UI をテストする
7. リクエストスペックで API をテストする
8.

元記事を表示

Rails:Sqlite3のタイムゾーン変更について

# 前提
使用フレームワーク: Ruby on Rals

作成したもの: railsを使ったごく単純な掲示版風アプリ(今回詳細は省きます)

使用DBエンジン: SQLite3(新規アプリ立ち上げ時のデフォルトのまま)

やりたいこと: デフォルトではレコードの作成日時と更新日時がUTC表記になっているので、テーブル上の表記をJSTに変更したい。

以下が作成したDBのスキーマ(後述のオチを知る前に作成したもの)
“`
## Table:posts
| Column Name | Data Type | Nullable |
|————-|———–|———-|
| title | string | |
| content | text | |
| created_at | datetime | false |
| updated_at | datetime | false |

“`
画像だと判別できませんが、created_atとupdated_

元記事を表示

Railsのフォーム送信時のname属性の設定

Railsアプリケーションでは、フォームから送信されるデータを処理する際に、`params`オブジェクトを介してパラメータを受け取ります。しかし、このパラメータが期待される形式でない場合、データの保存が失敗することがあります。今回は、`name`属性を適切に設定し、このような問題を解決する方法について解説します。

## 問題の発生

例えば、スタッフの選択と時間帯の選択を含むフォームから`TimeTable`モデルにデータを保存しようとしたとき、以下のようなログが出力されることがあります。

“`
ActionController::ParameterMissing (param is missing or the value is empty: time_table):
“`

このエラーは、期待されるパラメータ`time_table`が送信されていない、または空であることを示しています。

## 解決策: `name`属性の適切な設定

この問題を解決するためには、フォームの各フィールドで`name`属性を正しく設定する必要があります。特に、Railsではモデルに基づいたフォ

元記事を表示

Railsのプルダウンの選択肢の動的制御

Railsアプリケーションで、あるフォームの選択肢を他のフォームの選択結果に基づいて動的に表示・非表示する方法について説明します。この記事では、予約システムにおいて、スタッフが提供可能なサービスに応じて利用可能な時間帯の選択肢をプルダウンで表示する実装を例にとります。

## ユースケース

予約システムにおいて、顧客がスタッフとサービスを選択する際、指定されたサービスがそのスタッフによって提供されていない場合、利用可能な時間帯を選択できないようにします。これにより、顧客が予約不可能な組み合わせを選択することを防ぎます。

## データモデル

この機能を実現するためには、スタッフ、サービス、そしてそれらの関連を管理するためのテーブル構造が必要です。以下に例を示します:

“`ruby
create_table “available_services”, force: :cascade do |t|
t.bigint “staff_id”, null: false
t.bigint “service_id”, null: false
t.datetime “created

元記事を表示

【個人開発】韓国コスメでスキンケアのお悩みを解決するサービスを開発しました【Next.js + Rails API】

## はじめに
初めまして![りか](https://twitter.com/__rk2530)と申します。
未経験からのWebエンジニア転職を目指して、日々学習を行っております。

今回、韓国コスメのスキンケア情報サービス「KoreCare(コリケア)」を開発しました。

## サービス名
[KoreCare](https://korecare.jp/)
お試し機能を実装しましたので、ログインせずにお試しいただくこともできます。

![korecare_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3467801/d4569a94-2097-fe7b-8b33-2daa7547fd02.png)

**▼サービスURL**
https://korecare.jp/

**▼GitHub URL**
https://github.com/rk0325/korecare

## サービス概要
韓国コスメに特化した、スキンケア情報サービスです。

具体的には、
– ユーザーの肌質やお悩みに合った

元記事を表示

【個人開発】自転車好きのための投稿サービスを開発しました

## サービス概要
### サービス名 : 「ChariLog(チャリログ)

自慢のカスタムや友人とのツーリングなどの思い出を写真・カスタムパーツ(アイテム)と共に発信できる、 **自転車というツールに特化した投稿サービス**です。

![charilog-introduction-image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745701/3753f69c-60f0-4f44-70d6-6801f83f30ae.jpeg)
【サービスURL】https://charilog.jp
【Githubリポジトリ】https://github.com/kiyosan0517/charilog

## なぜそのサービスを作ろうと思ったのか
– **自転車の楽しさを共有できる友人づくりに多少苦労した経験があったため**
=> アメリカやヨーロッパ圏などではBMXやロードレース等を中心とした自転車競技がメジャースポーツとして発展しているものの、日本においては健康志向の中年層がメインに

元記事を表示

Rails + Stimulus で動的なフォームの選択肢を実装する

この記事では、RailsでStimulusを使用して、スタッフを選択すると関連する利用可能な時間帯のプルダウンが更新される機能を実装する手順をご紹介します。

## 目的

予約システムにおいて、ユーザーがスタッフを選ぶと、そのスタッフの利用可能な時間帯がプルダウンで選択できるようにします。これには、次の技術を使用します。

– **Rails**: アプリケーションのバックエンドフレームワーク
– **Stimulus**: フロントエンドのJavaScriptフレームワーク

## ステップ 1: フォームの準備

### 予約フォームのセットアップ

まず、以下のコードを使って、予約に必要な情報を取得するためのフォームを作成します。

“`erb

<%= @reservation.customer.name %>様の予約

予約内容

希望開始日時:

<%= @reservation.date.strftime('%Y-%m-%d') %> <%= @reservation.time_slot

元記事を表示

条件に合う配列のみをプルダウンに表示する方法

Railsで関連付けられたレコードの一部だけをフォームのセレクトボックスに表示する方法を紹介します。この例では、`Company` が複数の `Staff` を持ち、`Staff` は `Schedule` と関連付けられています。特定の日に勤務している(`at_work` カラムが `true`)スタッフのみをプルダウンに表示します。

## モデルの関連付け

まず、`Company` モデルと `Staff` モデル、`Schedule` モデルの間には以下のような関連付けが定義されているとします。

“`ruby
class Company < ApplicationRecord has_many :staffs end class Staff < ApplicationRecord belongs_to :company has_many :schedules end class Schedule < ApplicationRecord belongs_to :staff end ``` ## Company モデルでのメソッド定義 特定の日に勤務し

元記事を表示

【Rails】テスト時にRuntimeError: UNIQUE constraint failedが発生する

# 結論

`test/fixture/テーブル名.yml`の**データが被っている**ことが原因でした。

`User`モデルの`email`カラムに**Unique制約を後から付与**した結果、テストデータの`email`カラムの**値が被っていた**ため制約に違反しているというエラーが出ていたみたいです。

“`diff_yaml:test/fixture/users.yaml
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
name: MyString
email: MyString

two:
name: MyString
+ email: MyString2 # 被ってなければエラーは出ない
– email: MyString
“`

## 参考

https://stackoverflow.com/questions/31095429/rails-tutorial-sqlite3constraintexcepti

元記事を表示

OTHERカテゴリの最新記事