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

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

Draperの使い方:モデルがファットにならないようデコレーターを活用する

## gem draperをインストールする
gemfileにgemを記載
“`
gem ‘draper’
“`

bundle installする(下記はdocker使用の場合)
“`
docker compose run web bundle install
“`
システムにデコレーター層を追加
“`
rails generate draper:install
“`
デコレーターのファイルを追加
“`
rails generate decorator ○○(モデル名)
“`

## モデル名_decorator.rbにコードを書く
“`
lass UserDecorator < Draper::Decorator delegate_all def full_name "#{object.first_name} #{object.last_name}" end end ``` ## viewファイルに記述を加える ``` <%= current_user.decorate.full_name %>
“`

※サーバーの再起動を忘れずに・・

元記事を表示

stimulusを用いてテーブルのtdタグ全体をリンクにする方法

私は現在、未経験からのエンジニア転職に向けてプログラミングスクールで学習をしている、いしかわと申します。

現在PFを作成していますがテーブルを描写した際に、`stimulus`を用いてテーブルの子要素全体をリンクにした内容をアウトプットとしてこちらの記事にしました。
どなたかの参考になれば幸いです。

:::note warn
プログラミング初学者なので、内容に誤り等ある可能性があります
誤りがありましたら教えてくださると幸いです
:::

環境
ruby 3.2.2
rails on rails 7.0.8
stimulus 3.2.2
tailwindcss 3.3.6
daisyUI 3.9.6

# 実装
daisyUIの`tableクラス`を用いてテーブルを以下のように作成しています
“`html:HTML

<% @completed_requests.each_with_index do |request, index| %>

<%= index +

元記事を表示

【Rails】動的にDBのテーブルにカラムを追加してみる

どうもこんにちは。

今回は、動的にDBのテーブルにカラムを追加する方法をメモしていきます。

# 動的にカラムを追加とは?

本来であれば、DBのテーブルにカラムを追加する場合には、以下のような手順を踏むと思います。

1. マイグレーションファイル生成

“`sh
rails g migration AddNewColumnToSample
“`

2. マイグレーションファイル編集

“`ruby
class AddNewColumnToSample < ActiveRecord::Migration[7.0] def change # addcolumn :テーブル名, :カラム名, :データ型 add_column :samples, :new_column, :string end end ``` 3. マイグレーション実行 ```sh rails db:migrate ``` しかし、「custom_itemsテーブルにデータが登録された場合に、登録されたデータの名前でsamplesテーブルにカラムを追加したい」ということが出てきます。

元記事を表示

rubyXLのエクセル出力で部屋に属する所属毎にシートを分けてusersを書き込んでいく

## はじめに
開発で部屋に属する所属毎にシートを分けてエクセル出力する必要があり、ある程度実装ができたのでまとめる。
初学者やrubyXLでエクセル出力を実装しようとしている方々に少しでも参考にもなれば嬉しいのですが、
なんちゃってエンジニアによる自分のアウトプット用の投稿なので、よくないコードの書き方や、または分量的に省略している箇所もございますのでご了承をお願いします。
アドバイスがありましたらコメントを頂けますと幸いです。

## 出力フロー
roomの詳細ページから出力し、roomに紐づいているユーザー(users)を所属毎(affiliations)にシートを分けて用意してあるエクセルファイルに書き込んで出力します。
usersは中間テーブルのroom_usersを経由して取得します。

## テーブル構図
roomsテーブル(部屋)
|rooms|
|:–|
|id|
|name|

affiliationsテーブル(所属)
|affiliations|
|:–|
|id|
|name|

usersテーブル
|users|
|:–|
|id|
|name|
|af

元記事を表示

Rails APIエンドポイントの作成:基本操作

## **はじめに**
この記事では、Railsを使用して基本的なAPIエンドポイント(POST、PUT、GET、DELETE)を作成する方法をメモっぽく記載しておきます。

## **必要なもの**
– Ruby on Rails
– RESTful APIに関する基本的な理解

## **ステップ 1: Railsのセットアップ**
まずは、新しいRailsプロジェクトを作成する。ターミナルで以下のコマンドを実行

“`bash
rails new my_api_project –api
cd my_api_project
“`

このコマンドにより、API専用のRailsプロジェクトが作成される。

## **ステップ 2: モデルの作成**
今回はブログの記事を管理するための`Article`モデルを作成します。次のコマンドを実行

“`bash
rails generate model Article title:string body:text
rails db:migrate
“`

## **ステップ 3: コントローラの設定**
`Articles`コントロ

元記事を表示

rails g model と rails g migration の違い

# はじめに
`rails g model`と`rails g migration`の違いについて、なんとなくの理解しかできていなかったので備忘録としてまとめます。
# rails g modelとは
このコマンドは、新しいモデル(データベーステーブルの設計図)を作成します。モデルはデータベースのテーブルに対応し、アプリケーション内でのデータの取り扱いやロジックの管理に使用されます。
コマンドの記述方法は以下のようになります。
“`
$ rails g model モデル名 カラム名:データ型
“`
## 実行方法
例えば、以下のコマンドを実行すると、Userモデルに対応するデータベーステーブルを作成するマイグレーションファイルが生成されます。
“`
$ rails g model User name:string email:string
“`
続いて、このマイグレーションを実行して変更をデータベースに適用します。
“`
$ rails db:migrate
“`
# rails g migrationとは
このコマンドは、手動でマイグレーションファイルを生成します。主に

元記事を表示

ActiveHashの初期値を設定したらエラーメッセージが出てこなかった件

# はじめに
プログラミング初心者ですので、、温かく見守って頂けると幸いです。
何か間違っていたらコメントお願いします。
# エラーメッセージが出てこない
[![Image from Gyazo](https://i.gyazo.com/47e4958e4b02fbe12628de441de857c8.png)](https://gyazo.com/47e4958e4b02fbe12628de441de857c8)
ActiveHashを使用した入力フォームの初期値に上記のような初期値を設定していましたが、そうするとエラーメッセージが出ないという状況に陥りました。
しかも、初期値ではエラーメッセージ出ないのに、普通に項目を選択して保存しようとすると、”Category can’t be blank”というエラーが、、、(選択してるのに、、、)

# 解決
原因ははっきりしていませんが、修正した箇所としては、
idを0~から始めるのではなく1~から始めた。(上記の画像は修正後)
ビューのnew.html.erbの
**<%= f.collection_select(:category_i

元記事を表示

bootstrapのダウンロードの仕方

## gemをインストール
gemfileに以下を記載
“`
gem ‘bootstrap’, ‘~> 5.3.0’
“`

bundle installする(コンテナ内で行う場合)
“`
docker compose run web bundle install
“`
## 共通ファイル作成
flashメッセージは複数のビューファイルで使うので、部分テンプレートにしておく。
views/shared/_flash.html.erb
“`
<% flash.each do |message_type, message| %>

【Rails】選択画像のプレビューを動的に表示させる

画像のプレビュー機能をシンプルに書きたいと思い、JavaScriptのFileReaderで実装しました。メモとして残します。

# やりたいこと
1. input tyupe=”file”の`ファイルを選択`ボタンをクリックして画像ファイルを選択する。
1. プレビュー枠の画像が選択した画像に置きかわる。

# 実装環境
– Ruby on Rails
– Slim
– Carrier wave
– JavaScript

# 実装コード
必要なコードのみ抜粋します。

“`slim
/ form_withのコードの一部
label
= form.file_field :image, class: ‘d-none’, onchange: “previewImage(this, ‘previewImageField’)”
span.btn.btn-secondary ファイルを選択
= form.hidden_field :image_cache
/ プレビュー枠
– if hoge.image.present?
= image_t

元記事を表示

i18nによる日本語化対応【Rails】

docker環境で開発をしています。
Railsでデフォルトのロケール(言語)を設定するには、

## 1. config/application.rb ファイル内で config.i18n.default_locale を設定
“`
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join(‘config’, ‘locales’, ‘**’, ‘*.{rb,yml}’).to_s]
“`

## 2. Gemfileにi18nを記載→インストールする
“`
gem ‘rails-i18n’, ‘~> 7.0.0’
“`
“`
bundle install
“`

## 3. サーバーを再起動
“`
docker compose restart
“`

## 4. rails consoleで「I18n.t(‘date.abbr_day_names’)」と打ち、下記のように帰ってきたら設定完了。
“`
irb(main):001:0> I18n.t(‘date.abbr_

元記事を表示

Next.js(AppRouter)×RailsのAWS実行環境を、SSRを考慮して構築する【Terraform】

## 概要
Next.js(App Router)とRails APIで構成されるアプリケーションの実行環境を、AWSで構築する記事です。IaCにはTerraformを利用します。

構築する環境の構成図は以下に示す通りで、アプリの実行環境はECS/Fargateを利用しています。SeverComponentからRailsで実装したAPIを呼び出す際は、CloudMapによるサービスディスカバリを利用してコンテナ間で直接通信するようにしています。
![スクリーンショット 2024-01-21 15.15.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987556/80eafd5a-2e35-bf05-55b2-6464e2606b1e.png)

# ※注意点
この記事では、ECS/Fargate環境におけるISRの実現方法については触れていません。今回の構成で考慮しているのはSSR(cache: no-store)のみです。

ECS/

元記事を表示

【rails】Rspecおける基本事項まとめ

# 事前準備

1.下記のgithubより Gemfileに追加するコードを確認し、
gemfileに記述する。
“`
# Run against this stable release
group :development, :test do
gem ‘rspec-rails’, ‘~> 6.1.0’
end
“`

https://github.com/rspec/rspec-rails?tab=readme-ov-file#installation

2.bundle installコマンドにて上記のgemライブラリをインストールする。

3.docker-compose run web bundle exec rails g rspec:installにてrspecを実行するためのファイルを作成する。

→ railsファイル直下に“spec > spec_helper.rb“が生成される。

4.docker-compose exec web bundle exec ra
ils g rspec:model Model名
にてModelにおけるテスト用のファイルを

元記事を表示

Railsで作ったシステムのER図を日本語で出してほしいと言われたときにやったこと

Ruby on Railsを使った開発をしていると「システムのER図が欲しい」といったお願いされることがあります。

Railsを使っているのであれば、[rails-erd](https://github.com/voormedia/rails-erd/tree/master) というRubyGemを使うことで簡単にER図を出力できます。

https://github.com/voormedia/rails-erd/tree/master

rails-erdで出力されるER図はEntityもAttributeも全て英語です。

![erd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/96fe287e-0c02-5af4-4c64-d9bc974b1f7e.png)

提出先がエンジニアである場合や、普段からモデル名を使ったコミュニケーションをしている場合であればこのままでもなんとかなるかもしれません。

一方、相手がビジネスサイドのメンバーである場合や、普段はモデルを日本語変換してコミ

元記事を表示

Rails DBのカラム名の変更方法

# はじめに
今回はRailsでのカラム名の変更について紹介します。
Railsは初心者のため間違っている箇所などあればコメントで教えてください。

# エラー
メソッドでエラーが出ていますよというエラーだったので、「メソッドで記載ミスがあったのか!」と思いメソッドを探しても何も見つからず、、
→結果的に、DBのカラム名が
正:completed
誤:comleted
と「p」が抜けていたのが原因でした。

![スクリーンショット 2024-01-20 20.18.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/52f4915b-9b62-d786-7b62-35e703e3dc6d.png)

# RailsでのDBカラム名の変更方法
### ①カラム名を変更するためのマイグレーションファイルを作成する
` $ rails g migration rename_変更前のカラム名_column_to_テーブル名`
“`
$ rails g migration rename_co

元記事を表示

【Rails】デプロイ時にロードバランサーのタイムアウト値をカスタムするのだ

どうもこんにちは。

今回はRailsアプリケーションのデプロイ時にロードバランサーのタイムアウト値を自動で更新できるようにしました。

# 経緯

私の会社では、新しいバージョンをデプロイするときに、以下の流れで作業を行います。

1. RDSのデータをバックアップ
1. ElasticBeanstalkの環境をクローン(複製)する
1. EC2の画面から、ロードバランサーのアイドルタイムアウトの値を60秒→1200秒に変更する
1. ソースコードをデプロイする

60秒→1200秒へ変更する理由は、「動画ファイルなどの容量の大きなファイルをサーバーへアップロードするときに60秒以上が経過してしまうと504ステータスエラーが発生してしまう」からです。

つまり、動画ファイルをアップロードしている途中にサーバーが通信をストップしてしまうということです。

# ebextensionsを使用する

今回はebextensionsを使用してカスタムを行いました。

ebextensionsとは、Elastic Beanstalkでの環境構築時に環境をカスタマイズする設定ファイルを配置するデ

元記事を表示

【Ruby on Rails】コンテナ内部でrailsコマンド実行したら、bash: rails: コマンドが見つかりません

# 初めに
普段使用している railsコマンド が使えなかったので書きます。

# 問題

① “`docker compose exec web bash“` をターミナルで実行してコンテナ内部に入る
② “` rails console“` 実行
③ bash: rails: コマンドが見つかりません

# 解決方法

“`bin/rails console“` rails consoleの前に “`bin/“` を付ける

原因はrails new で新規プロジェクトを立ち上げたときに binディレクトリが生成されてその配下にrailsコマンドを格納しているファイルを読み込んでいるから。

# 終わりに

普段何気なく、railsコマンドを使っていたので勉強になりました。

元記事を表示

`length` `size` `count`の使い分け【後編:Rails】

# はじめに
[`length` `size` `count`の使い分け【前編:Ruby】](https://qiita.com/kohki_takatama/items/c8236b6a2e267e2dad20)の続きですが、この記事だけでも完結した内容になっています。

Rubyの`length` `size` `count`を調べてる間に気づいた、「Railsだと定義が違うぞ・・・・・・」
ということで、Railsでも`length` `size` `count`について調べていきます。
※注記しない限り、`count`は引数を与えないものとします。
## この記事のまとめです
### Rails (`ActiveRecord`) の`length` `size` `count`
正確には`AcriveRecord::Associations::CollectionProxy`です。
コレクションとは、配列やハッシュなど要素の集まりのことです。
– `length`:コレクションをメモリにロードし、要素数を取得します。
すでにメモリ上にあれば、その要素数を取得します。
– `

元記事を表示

Ruby on RailsにおけるN+1問題

## 概要
N+1問題は、1つのクエリによって複数のレコードを取得した後、
各レコードに対して関連するデータを取得するために追加のクエリが必要になる状況を指します。

N+1問題が発生すると、データベースへのアクセス回数が余計に多くなってしまいます、それはデータベースに対するクエリの数が大幅に増加するからです。

## N+1問題の原因

N+1問題が発生する原因は、データモデル間のアソシエーション・関連にあります。
Ruby on Railsでは、データモデル間にアソシエーションを定義することで、関連するデータを取得することができますよね?

### 具体例

1.ブログアプリケーションで、すべての記事を取得し、
2.それぞれの記事に対して投稿者の情報を表示する必要があるとします。
一見、効率的に見えるこの操作が、実際には非効率的になることがあります。

ステップ1: すべての記事を取得するためのクエリ。
ステップ2: 各記事に対して、投稿者情報を取得するための追加クエリ。
ここで問題となるのは、ステップ2での繰り返しクエリです。記事の数が多いほど、データベースへのクエリ数が増加し、

元記事を表示

`length` `size` `count`の使い分け【前編:Ruby】

# はじめに
みなさん、Rubyの `length` `size` `count` の使い分け、気になりますよね??🤗
そう思って!公式リファレンスも含め調べたんですが、どれもいまいちしっくりこない。
以下、しっくりこなかったリスト
– `size`と`length`は全く同じ挙動をする(ほんとに?根拠は?)
– 条件付きなら`count`でそれ以外は`size` `length`(なぜ?)
– `count`は重い(なぜ?)

なぜ ↑ のように言われるかがわかるようになっています。

なお、Railsの場合(ActiveRecord)は挙動が違うので後編で書きます。
(2024 / 01時点の言語仕様に基づいた情報です)
## この記事のまとめです
### Ruby の`length` `size` `count` の挙動
特に言及のない場合、`Array`クラスについて話しています。ただし、「`Enumerable`モジュールの`count`」を除き、どのクラスでも同様の挙動だろうと思います(`String`クラスなど)

– `Array.length` `Array.size

元記事を表示

【Rails7 + Docker】Viewファイルの変更がlocalhostで反映されない不具合を解消する

Docker化したRailsアプリを開発中、Viewファイル(.html.erb)のソースコードを変更して開発環境のlocalhostをリロードしても変更が反映されない不具合に遭遇しました。`docker-compose.yml`でホストのディレクトリをコンテナにマウントしているため、それまではソースコードの変更はブラウザをリロードすると反映されていたのですが、急に反映されなくなりました。`docker compose down`で一旦コンテナを落としてから`docker compose up`をすれば反映されるのですが、ソースコード変更の度にそれをやるのは効率が悪すぎるため、解決方法を調べ、自分が実際に上手くいった方法をまとめました。

環境は以下のとおりです。
– OS:IntelMac
– Docker
– docker-compose
– Rails7.0.6
– PostgreSQL

“`docker-compose.yml
version: ‘3’
services:
web:
build: .
image: rails_template:lates

元記事を表示

OTHERカテゴリの最新記事