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

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

Rails 7 にBootstrapを導入

## はじめに
Railsでアプリ作成時にBootstrapを導入することで、高速でレスポンシブなアプリを作成できるようになります。Gemを使った導入の仕方を以下にまとめます。

## 開発環境
– Rails 7.0.8.4ruby
– Ruby 3.2.0
– Bootstrap 5.3.3

## 手順
### 1. Gemを導入する
Gemfileに以下2つのGemを追加します。
“` Ruby:Gemfile
gem ‘bootstrap’, ‘~> 5.3.3’
gem ‘jquery-rails’
“`
またGemfile に以下のGemがコメントアウトされているので、コメントアウトをなくしてください。
“`ruby:gemfile
gem “sassc-rails”
“`
[![Image from Gyazo](https://i.gyazo.com/b8b317e13ac5d7d39bc1badf0b6bb5d6.gif)](https://gyazo.com/b8b317e13ac5d7d39bc1badf0b6bb5d6)
この作業を飛ばすと下のエラー

元記事を表示

Index name ‘Index name’ on table ‘Table name’ already existsって言われたとき

# はじめに
以下のマイグレーションエラーがよく起きてたけど、
対処法は毎度同じだったので手順を残す

## Index name {Index name} on table {Table name} already exists
`rails db:migrate`または`rails db:migrate:up VERSION={バージョン}`したときに、
上記のエラーメッセージで怒られる

## やったこと

テーブルまたはインデックスが本当にあるのか確認
“`cmd
$ docker compose exec db bash
$ mysql -u root -p
# パスワード入力

# 本当にテーブルがあるのか → あった
show columns from {Table name};

# そのテーブルに当該Indexはあるのか → あった
show index from {Table name};
“`

作成しようとしている所に作成しているあるから怒られると思う
ならば消してみる
“`cmd
# インデックスがあれば消す
alter table {Table nam

元記事を表示

オリジナルアプリ(ウォンツ)の制作過程〜要件定義〜

## はじめに

こんにちは、今日もオリジナルアプリの制作過程を記録していきます。今日は要件定義についてです!
このシリーズの記事では、企画・要件定義から設計、実装、テストまでの全てのプロセスを詳細に説明します。毎日少しずつ進めていきますので、アドバイスや指摘があればぜひ教えてください。

## 要件定義

### 機能要件

#### ユーザー管理
– **ユーザー登録**: 名前、メールアドレス、パスワード、住所を入力して新規登録。
– **ログイン/ログアウト**: 登録済みユーザーがメールアドレスとパスワードでログイン。
– **ユーザープロフィール管理**: 名前、住所、メールアドレス、電話番号の変更機能。

#### 依頼管理
– **依頼内容**: タイトル、説明、カテゴリー、条件価格、画像をアップロードし、依頼の投稿。
– **依頼一覧表示**: 全依頼の一覧を表示、カテゴリーや価格帯でフィルタリング可能。
– **依頼条件詳細表示**: 依頼の条件の詳細情報(タイトル、説明、上限・下限価格、依頼者情報、着払い可否)を表示。
– **依頼検索**: 依頼している商品タイ

元記事を表示

view/devise/passwords/edit.html.erbとview/users/edit.html.erbの違い

# ①app/view/devise/passwords/edit.html.erb
## 目的
このファイルは、パスワードをリセットするためのビューを提供するためのもの。
ユーザーが「パスワードを忘れた」場合に、メールで送信されたリンクを使って新しいパスワードを設定するためのフォームとなる。

## 主な機能
・パスワードリセットトークンの入力
・新しいパスワードの入力
・パスワードの確認
・フォームの例

## 実装例
“`ruby:app/view/devise/passwords/edit.html.erb

Change your password

<%= form_with(model: resource, url: password_path(resource_name), method: :put, local: true) do |f| %>
<%= devise_error_messages! %>

<%= f.label :password, "New password" %>

元記事を表示

【Rails】個人的によく使うコマンドまとめ

Rails初学者の学習内容の備忘録です。
間違いや補足等あればご指摘いただけると幸いです。

今回は個人的によく使う基本的なコマンドをまとめます。

# コマンド一覧

**ディレクトリに新しいRailsアプリケーションを作成する**
“`
rails new アプリケーション名
“`
**モデルの生成**
“`
rails g(generate) model モデル名 カラム名:データ型
“`
**モデルの削除**
“`
rails d(destroy) model モデル名 カラム名:データ型
“`
**コントローラ生成**
“`
rails g(generate) controller コントローラ名 アクション名
“`
**コントローラ削除**
“`
rails d(destroy) controller コントローラ名 アクション名
“`
**サーバー起動**
“`
rails s(server)
“`
**コンソール起動**
“`
rails console
“`
**ルートを確認する**
“`
rails routes
“`
**カラムを追

元記事を表示

find_each と find_in_batches と in_batches の違い

## find_each

[Railsドキュメント](https://railsdoc.com/page/find_each)
[github](https://github.com/rails/rails/blob/984c3ef2775781d47efa9f541ce570daa2434a80/activerecord/lib/active_record/relation/batches.rb#L68)

### 説明
分割してレコードを取得して1件ずつ処理
デフォルトでは1000件ずつ処理 大きなデータをもつモデルなどを処理する時に使う
内部的には、find_in_batchesを使っており、戻り値の配列に対してeachを実行することで1レコードずつ返している
そのため、使い方はeachと全く同じ

### ソースコード

“`rb
def find_each(start: nil, finish: nil, batch_size: 1000, error_on_ignore: nil, order: :asc, &block)
if block_give

元記事を表示

【Factory bot】Rspecでのテストコード作成をもっと楽に!

# はじめに
こんにちは、エンジニア3年目の嶋田です。
この記事を開いていただきありがとうございます!

私がエンジニアとして働き始めてから、テストの重要性を痛感しています。
特にRspecを使用したテストは、コードの品質を保つために欠かせません。
そして、テストデータの生成にはFactory Botが非常に役立ちます。

今回は、Rspecで使用するFactory Botの基本的な使い方や便利な機能についてまとめてみました。
この記事が皆さんのテストコードの質を向上させる一助となれば幸いです。

より詳しく知りたい方は、以下のページを参照して下さい。
(※この記事の内容の大半は、以下のページに書かれている内容です)
[Factory Bot Getting Started](https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md)

# 目次
– [Factory Botとは](#Factory-Botとは)
– [Factoryの定義](#Factoryの定義)

元記事を表示

オリジナルアプリ(ウォンツ)の制作過程

こんにちは!この記事では、未経験からエンジニアを目指す初学者の私が、オリジナルアプリの制作過程を記録していきます。使用する言語はRubyとRailsです。これから(ほぼ)毎日の進捗や学びを投稿していきますので、アドバイスや指摘があればぜひ教えてください。

## 企画の練り方

まずは、アプリの企画を練ることから始めます。どんなアプリを作りたいのか、誰のためのアプリなのかを明確にすることが重要です。今日は具体的なユーザーペルソナを作成しました。

## 今日の進捗:ペルソナの作成

### ペルソナ: 田中 和也 (Kazuyuki Tanaka)

| 項目 | 詳細 |
|———————-|———————————————————————-|
| **一般情報** |

元記事を表示

初学者のためのRailsの豆知識

# Railsのあまり知られていない豆知識

Railsは初心者にも使いやすいフレームワークですが、少し掘り下げると便利な機能がたくさんあります。今回は、Railsのあまり知られていない豆知識をいくつか紹介します。これらの機能を使うことで、より効率的に開発が進むでしょう。

## 1. `find_by`メソッド

`find_by`メソッドを使うと、特定の条件に一致する最初のレコードを簡単に取得できます。

“`ruby
# IDが1のユーザーを取得
user = User.find_by(id: 1)

# emailが特定の値のユーザーを取得
user = User.find_by(email: “example@example.com”)
“`

`find_by`メソッドは見つからない場合に`nil`を返すので、例外が発生することなく安全に使えます。

## 2. `update`メソッド

`update`メソッドを使うと、一度に複数の属性を更新できます。

“`ruby
user = User.find_by(id: 1)
if user.update(name:

元記事を表示

RSpecで日付の値が有効ではないとHTMLから警告されて詰まる(一応は解決)

# 結論

https://aaronsaray.com/2015/error-validating-seconds-in-html5-time-input/

– HTML5では`input`要素の入力値に対してのバリデーションが働くため
– ‘email’など高頻度で使われるであろう形式にも機能

## 【編集時】
– Railsのフォームヘルパー `form.datetime_field` で生成されるのは ``
– `YYYY-MM-DDThh:mm` という書式で値を扱っている
– この書式に注意する必要がある

“`ruby:”編集”の場合
# OKパターン
fill_in ‘Deadline’, with: ‘2001-02-03T04:50’
fill_in ‘Deadline’, with: Time.new(2001, 2, 3, 4, 50).strftime(“%m%d%Y\t%I%M%P”)

# ERRORパターン
fill_in ‘Deadline’, with: Time.ne

元記事を表示

【個人開発】筋トレサポートアプリを開発しました。【Next.js + Rails API】

# はじめに
初めまして!ニノ(@Ninomin)と申します。
大学では心理学を学び、新卒で独立系Slerに入社し、現在3年目です。未経験からのWebエンジニア転職を目指して、日々プログラミング学習を行っています。
今回、筋トレサポートサービス **「Be Fit」** を開発しました。

# 目次

| 章 | タイトル | 備考 |
| — | — | — |
| 1 | [サービスについて](#1サービスについて) | サービスURL, GitHub |
| 2 | [サービス概要](#2サービス概要)|概要について |
| 3 | [サービスを作成した背景](#3サービスを作成した背景)| 開発に至った理由について |
| 4| [機能一覧](#4機能一覧)| 主要機能について|
| 5| [使用技術](#5使用技術)| 主要技術について |
| 6| [インフラ構成](#6インフラ構成)| インフラ構成図 |
| 7| [技術選定理由](#7技術選定理由)| |
| 8 | [ER図](#8er図) | |
| 9| [工夫したポイント](#9工

元記事を表示

最速でRailsアプリケーションをDockerコンテナ上で動かす

## 経緯
– [仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん | 小笠原種高 |本 | 通販 | Amazon](https://www.amazon.co.jp/%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%A8%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B-Docker-Kubernetes%E3%81%AE%E3%81%8D%E3%81%BB%E3%82%93%E3%81%AE%E3%81%8D%E3%81%BB%E3%82%93-%E5%B0%8F%E7%AC%A0%E5%8E%9F%E7%A8%AE%E9%AB%98/dp/4839972745)を読んだのでアウトプットとして勉強中のRailsアプリの環境をDockerコンテナ上で作ってみようと思いました。
– 今から書く内容は、Dockerコンテナ上で動くRailsアプリケーションを配布(Github)できるようになるまでの流れを最速でやってみようと言うものです。(最速というか、最短の方が近い

元記事を表示

【Rails】resourcesによるルーティング

# はじめに
Rails初学者の学習内容の備忘録です。
間違いや補足等あればご指摘いただけると幸いです。

今回はresourcesについて学習したのでまとめます。

# resourcesとは?
Railsのルーティングでよく使われるメソッドで、一般的なCRUD(Create,Read,Update,Delete)操作に対応するルートを自動生成します。

**resourcesを使わない場合**
“`routes.rb
get “posts”, to: “posts#index”
get “posts/new”, to: “posts#new”
get “posts/:id”, to: “posts#show”
post “posts”, to: “posts#create”
get “posts/:id/edit”, to: “posts#edit”
patch “posts/:id”, to: “posts#update”
delete “posts/:id”, to: “posts#destroy”
“`
resourcesを使わない場合は

元記事を表示

railsでテーブルを関連付けした際のwhereでのカラムの指定の仕方について

– includes
– preload
– eager_load

などで関連テーブルを読み込んだ際に、whereメソッドから関連テーブルのカラムを参照したい場合はreferencesキーワードを使って関連テーブル名を宣言する必要がある
“`rb
User.includes(:posts).where(“posts.name = ‘foo'”)
  # Doesn’t JOIN the posts table, resulting in an error.
User.includes(:posts).where(“posts.name = ‘foo'”).references(:posts)
# Query now knows the string references posts, so adds a JOIN
“`

`joins`メソッドを使う際は不要だと思うが、`incluedes`などの関連付けをeager loadingするメソッドを採用した際にはreferencesメソッドの出番になる感じだと思う
https://api.rubyonrails.org

元記事を表示

【Rails】each, find_each, find_in_batches の違い

# 前提
– 環境
– Ruby:`2.5`
– Rails:`4.2`
– 少々古めのバージョンになります
– ただ、次世代のバージョンにおいても本記事が参考になれば幸いです
– 今回扱うデータ
– ***company.rb***
– `has_many :shops`
– ***shop.rb***
– `belongs_to :company`
– データ数
– 事前に取得する ***company*** の件数を`50`件とします

つまり、下記コードで取得される***company***の件数が`50件`という前提で進めます。
“`rb
Company.joins(:shops).where(shops: { prefecture: ‘東京都’ }).distinct
“`

# each

“`rb:メインの確認コード
companies.each.with_index(1) do |company, i|
puts “loop_count: #{i}, company_id: #{company.id}”

元記事を表示

[Rails] マークダウン形式でtext_areaに入力できるようにする

# commonmarker

– `gem commonmaker`をインストール
“`
gem ‘commonmarker’
“`
– helperに下記を記述
“`module ApplicationHelper
def markdown_to_html(text)
html = Commonmarker.to_html(text)
raw(html)
end
end
“`
– 例)show.html.haml
“`
= markdown_to_html(“# CommonMarker”)
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/fd44edd2-6589-33c2-5658-d29cded00577.png)

### 参考URL
https://github.com/gjtorikian/commonmarker

思いのほかサクッと実装できました。
何かご指摘あればお願いします!

元記事を表示

VSCodeでrails開発する時のコーディング効率を上げたい

Railsの初学者です。

VSCodeでコーディングするときにスペルミスやタイピングに時間がかかることを課題に感じたため
Railsに関するエディターの設定や拡張機能を色々と試しています!
現状設定や導入を行ったものをまとめつつ、記事もアップデートしていきたいと思います。

# Emmetの設定
Emmet とは、htmlで補完してくれたり、省略記法で入力できる機能。
htmlはデフォルトで適用されていますが、html.erbでEmmetを使用するためには
setting.jsonで設定する必要があります。

“`json
{
“emmet.includeLanguages”: {
“erb”: “html”,
“html.erb”: “html”
}
}
“`

# 導入した拡張機能
VSCodeで以下の拡張機能を導入してみました。
知識が浅く、まだどんな機能が提供されているのか理解し切れていない拡張機能もあるので
これから使いながら理解していきます…!

## endwise
`def`や`if`の後の`end`を自動入力してくれる。

https

元記事を表示

個人開発を始めてみた #1

## 個人開発を始めた背景
初めまして。都内で新米エンジニアとして働いている者です。新卒として働き始めて、3ヶ月が経ちました。その中で、技術を高めるためには業務以外での膨大なアウトプットが必要だと考えるようになりました。とりあえず、100個ほど制作して、少しはまともになりたいと思っています。

そこで、1〜2年ほどかけて個人開発物を100個作っていこうと決心しました。たくさんの制作物を開発し、自分のナレッジを蓄積すると同時に、自分の開発スキルをブラッシュアップしていこうと考えています。

## Webサイト [試作品1号]
まず、Webサイトの制作を始めようと思い、ReactとTailwindCSSを使ってWebサイトを制作しました。しかし、UIがかなり微妙な仕上がりになってしまいました。

![スクリーンショット 2024-07-21 22.10.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1788291/2e22e5ee-4ab7-b53c-11f8-5748ede0fdf4.png)

元記事を表示

翻訳ファイルの反映を確認するときはサーバーを再起動するのが基本だろ?

新しく翻訳ファイルを追加したbranchを開いた際、viewに翻訳が反映されなかったので原因を4時間ほど探っていました。

– ファイルの場所
– ファイルの命名
– 設定の書き方
– ymlの書き方

多くの可能性を探りました。

しかし、ある記事を見た際に

‘gemをインストールしたらサーバーを再起動するのは基本中の基本です。’
という文言を見かけました。

今回の場合はgemをインストールしていたわけではないですが、以前取り組んだ教材に’翻訳ファイルに文言を追加した際はサーバーを再起動しよう!’みたいな文言があったことを思い出しました。

4時間という貴重な時間を割いた代償としてこの結論を得たのは不服ですが、解決したので今回は良しとしましょう。

元記事を表示

Rakeタスクの使い方

## 経緯
本番環境へあげる際に、rails db:migrateの順番が複雑化したことがありました。その結果、本番環境へデプロイする担当者が手間取ってしまうことが多々ありました。そこで、Rakeタスクを利用してマイグレーション順を自動化し、誰でも簡単にデプロイできるようにする方法を紹介します。

## Rakeタスクの基本
まず、Rakeタスクの基本的な作成方法を説明します。Rakeタスクは、Railsのプロジェクト内のlib/tasksディレクトリに配置します。

Rakeタスクのファイル作成
以下のようなファイルをlib/tasksディレクトリに作成します。
“`
touch lib/tasks/db_migrate.rake
“`
Rakeタスクのファイル作成
以下のようなファイルをlib/tasksディレクトリに作成します。

“`
# lib/tasks/db_migrate.rake

namespace :task do
desc “Custom DB Migrate”
task migrate_custom: :environment do
p

元記事を表示

OTHERカテゴリの最新記事