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

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

Railsで`before_filter`が`before_action`に変更された理由と対処法

## はじめに

Rails 5以降で、`before_filter`が廃止され、`before_action`に変更されました。この変更により、古いコードをそのまま使おうとするとエラーが発生します。この記事では、この変更の理由と簡単な対処法を紹介します。

## 変更の理由

– **一貫性**: 他のフィルタ(`after_action`や`around_action`)と命名を統一するために変更されました。
– **直感的な名前**: `before_action`という名前の方が、アクションの前に実行するという意味が明確です。

## 対処法

`before_filter`を使用している場合、`before_action`に置き換えるだけです。

### 変更例

**変更前**:
“`ruby
before_filter :authenticate_user
“`

**変更後**:
“`ruby
before_action :authenticate_user
“`

このように、`before_filter`をすべて`before_action`に書き換えて

元記事を表示

【Rails】 scopeについて

# Railsにおけるscopeの定義方法

scopeは、よく使うクエリを簡単に定義し、再利用可能にするための機能です。この記事では、scopeの定義方法や使い方について、通常のメソッドとの違いを交えて説明します。また、scopeの使用に対する現場での考え方の違いについても触れます。

## scopeの基本構文

scopeは通常のメソッドと少し異なりますが、シンプルに定義できます。基本構文は以下の通りです。

“`ruby
scope :スコープ名, -> { 処理 }
“`
###### :スコープ名
scopeの名前を指定します。メソッドのように呼び出し時に使います。
###### -> { 処理 }
無名関数(ラムダ)を使って、処理内容を記述します。whereやorderなどのActiveRecordメソッドを組み込むことができます。

無名関数(ラムダ)の詳細については、こちらを参照してください。
https://qiita.com/Yaaaaa_meat/items/a7a5502b890ab4c5e181

以下の例では、価格が500円以下の本を取得するsc

元記事を表示

rails g serializer の再発明。(jsonapi_serializerでも使えることを知らなかった)

# はじめに
みなさん、こんにちは **torihazi**です

今日はもしかしたら車輪の再発明みたいなことをしてしまったかもしれません。

あるの知りませんでした。

jsonapi_serializerを使っていて

`rails g serializer user`みたいなことをするときに

できないんじゃね?と思ってしまってあーだこーだしながら作ってみました。

今調べたらあったみたいです。

# 経緯
rails g serializer hogeみたいにしたらserializersディレクトリ配下に

hoge_serializer.rbみたいなファイルができて欲しかったので

それをコマンドラインからできる術を調べていました。

なにしろめんどくさかったので。

とりあえず`rails generate generator hoge`を使うと

`lib/generaters/hogeディレクトリ`とか色々作られることがわかりました。

んで、active_model_serializersだとそれがあるけど

jsonapi_serializerだとそれがないから作る

元記事を表示

Rubyで`URI.escape`エラーを解決するパッチの紹介

## はじめに

Rubyを使用しているプロジェクトで、`URI.escape`メソッドを使っていないにもかかわらず、以下のエラーが発生しました。

“`
undefined method `escape’ for URI:Module
“`
###### escapeの使用箇所が見当たらないで、探すのは諦めてパッチを当てることにしました。
`URI.escape`はRuby 2.7以降で非推奨となり、Ruby 3.0で削除されています。そのため、古いコードや依存ライブラリが`URI.escape`に依存しているとエラーが発生することがあります。この記事では、`URI.escape`が使えない環境でこのエラーを解決するためにパッチを当てる方法を紹介します。

## 解決方法

以下のコードを使用して`URI.escape`メソッドを自前で定義することで、エラーを解決できます。このパッチは`config/initializers/functions_overrides.rb`に追加します。

### コード

“`ruby:config/initializers/functions

元記事を表示

Railsマイグレーションの基本:複数カラムの追加と注意点

こんにちは!社会人1年目の初心者エンジニアです。
最近、データベースのスキーマを変更するためにマイグレーションを利用することが多くなりました。
この記事では、テーブルに複数のカラムを追加する方法と、マイグレーションを実行する際の注意点について説明します。

# 1. change_table を使って複数カラムを追加する
新しいカラムを追加する際、change_tableメソッドを使うと、複数のカラムを一度にまとめて追加できます。以下は、employeesテーブルにphone_numberとdepartmentを追加するマイグレーションの例です。
“`
class AddColumnsToEmployees < ActiveRecord::Migration[6.0] def change change_table :employees do |t| t.string :phone_number, comment: '電話番号' t.string :department, comment: '部署名' end end end ``` #

元記事を表示

ローカルでRails環境を構築し、DockerイメージにしてECRへアップロードする

### 1.ローカルでRailsのインストールとプロジェクトの作成
1.Railsのインストール
“`
gem install rails
“`

2.新規Railsプロジェクトの作成
“`
rails new hello_world –skip-active-record –skip-test –skip-bundle
“`
・–skip-active-recordでデータベース関連の設定をスキップ
・–skip-testでテストフレームワークをスキップ
・–skip-bundleでbundle installの設定をスキップ

3.プロジェクトディレクトリに移動
“`
cd hello_world_rails
“`

4.Gemfileの依存関係をインストール
“`
bundle install
“`

5.トップページに”Hello World!!”を表示するルートを定義
“`config/routes.rb
Rails.application.routes.draw do
root to: ‘application#hello’
end
“`

元記事を表示

Rubyの`proc`と`lambda`についての学習記録

# Rubyの`proc`と`lambda`についての学習記録

Rubyの開発で役立つ`proc`と`lambda`について理解を深めるため、まずは基本となるブロックから学びました。この記事では、ブロック、`proc`、そして`lambda`の使い方や違いについて整理し、コード例を交えて説明します。

## ブロックとは

ブロックは、メソッドに渡す処理のまとまりを表します。以下の例では、`do…end`の間にある部分がブロックです。

“`ruby
users = [“太郎”, “花子”]
users.each do |user|
p “私の名前は” + user + “です”
end
“`
do…endの代わりに{ }を使うこともできます。
“`ruby
users = [“太郎”, “花子”]
users.each { |user| p “私の名前は” + user + “です” }
“`

ブロックをメソッドの引数として渡すことで、繰り返し処理などを効率よく書けるようになります。このブロックをオブジェクトとして再利用できるようにしたものが、procやlam

元記事を表示

fields_forとaccepts_nested_attributes_forでネストされたフォームを簡単に扱う方法と注意点

# はじめに
日々勉強中の駆け出しWebエンジニアです。最近のプロジェクトで多用している`fields_for`について学んだことをまとめようと思います。
Railsのフォームを作成する際に、ネストしたモデルを扱う場面で登場する`fields_for`の使い方で、フォームが表示されなくなったり、ストロングパラメータの設定で悩むことがあったので、これから学ぶ方の助けになれば幸いです。

# fields_forとは
`fields_for`は、Railsのフォームビルダーの一部であり、親モデルにネストされた子モデルに対するフォーム要素を作成するために使用されます。`form_with`などとは異なり、fields_forは親モデル内で関連する子モデルに対してのフォームを生成できます。

例えば、ある親モデル(Post)が子モデル(Comment)を持つ場合、投稿フォーム内にコメントフォームを作成することができます。これにより、1つのフォームでPostとCommentの両モデルを更新することができます。

基本的な使い方としては、form_withのブロック内でfields_forを使用し

元記事を表示

【Ruby on Rails】初学者向け-開発の流れについて③ Bootstrapの導入編

本記事については簡易的なタスク管理アプリを作成することを前提に、
下記流れのもと、Railsの開発について言及して行きたいと思います。

## Rails開発の流れについて

・Railsプロジェクトの作成とDockerの設定
[【Ruby on Rails】初学者向け-開発の流れについて① プロジェクトの作成編](https://qiita.com/y-kida/items/2c8634ceb28a93c84bc9 “Qiita Home”)

・Gem・DB設定とルーティング
[【Ruby on Rails】初学者向け-開発の流れについて② Gem・DB設定とルーティング編](https://qiita.com/y-kida/items/1d34bf72a3296579f213 “Qiita Home”)

**・Bootstrapの導入(今回学習するのはこちら)**
・一覧、新規作成、参照、更新、削除画面機能の追加
・検索機能の追加
・DBやモデル周りの整備
・バリデーション機能追加
・ユーザー認証機能追加

(※ 他追加機能があれば随時記事にしていく予定です)

——-

元記事を表示

Webpacker::Manifest::MissingEntryError at / のエラーに悩まされた(備忘録)

Rails、Dockerで作業をしていたら以下のようなエラーが出てしまい、解決に時間がかかりました。

## エラーについて
エラーは以下の通りです。
“`docker:エラー内容
Webpacker::Manifest::MissingEntryError at /

Webpacker can’t find application.js in /myapp/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker’s config/webpacker.yml file.
“`
調べてみると

元記事を表示

【Ruby on Rails】初学者向け-開発の流れについて② Gem・DB設定とルーティング編

本記事については簡易的なタスク管理アプリを作成することを前提に、
下記流れのもと、Railsの開発について言及して行きたいと思います。

## Rails開発の流れについて

・Railsプロジェクトの作成とDockerの設定
[【Ruby on Rails】初学者向け-開発の流れについて① プロジェクトの作成編](https://qiita.com/y-kida/items/2c8634ceb28a93c84bc9 “Qiita Home”)

**・Gem・DB設定とルーティング(今回学習するのはこちら)**
・Bootstrapの導入
・一覧、新規作成、参照、更新、削除画面機能の追加
・検索機能の追加
・DBやモデル周りの整備
・バリデーション機能追加
・ユーザー認証機能追加

(※ 他追加機能があれば随時記事にしていく予定です)

——————————————————–
**前提**
・Docker
・Ruby on Rails 7
・Mysql
・BootStrap
・VSCode

———

元記事を表示

Railsで学ぶ依存性注入(DI)!なぜDIが開発効率を劇的に向上させるのか?

## はじめに
**依存性注入**(DI: Dependency Injection)という言葉を聞いたことはあるでしょうか?ソフトウェア開発において、オブジェクト同士の依存関係を解消し、柔軟で拡張性の高いコードを書くための手法として注目されています。特に、Ruby on Railsのようなフレームワークでも、このDIの考え方を取り入れることで、テストのしやすさやコードの保守性が格段に向上します。

この記事では、DIとは何か、そしてRailsでの実践方法についてわかりやすく解説していきます。まずは依存性注入の基本的な概念を押さえ、Railsでどのように活用できるのかを見ていきましょう。

## 依存性注入(DI)とは?
**依存性注入**(DI)は、オブジェクトが内部で依存する他のオブジェクトを外部から注入(渡す)する仕組みです。通常、クラス内で依存するオブジェクトを生成する場合、そのクラスと依存オブジェクトが強く結びついてしまうため、コードの変更がしにくく、テストもしづらくなります。

### 例: 依存性が結びついたコード
“`ruby
class PaymentProcess

元記事を表示

「partialにindexを渡せなかったことがある」というのが いつか大きな財産になる

# 始まりは自己紹介から
初めまして、あおげばにゃんこです。
最近はrailsだけでなくreactも触れるようになり、少しイキリながらコードを書いていた矢先悲劇が起こりましたのでご報告します。

今回はgem ‘cocoon’を使っていた際、どうしてもnest-fields内にindexを渡したかったのですが、イメージしていた方法では実現することができなかったので、記事にしました。

:::note warn
今回は手法を紹介するのみで、なぜこのコードが可能なのかといったrails自体には一切触れません。
:::

# partialにindexが渡せないという現実

## context
– cocoonについて
cocoonは親モデルのフォームにネストした形で子モデルの要素を同時にいくつも作成/更新できるフォームを作成するために使われるgemです。
デフォでpartialを必要とし,「.nested-fields」というcssの単位で子モデルフォームを認識しています。

故に今回は省いていますが、すでに親モデルのフォーム内ということを念頭に見てください
## code

“`us

元記事を表示

has_one_attachedとは

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## 発端
モデルにhas_oneと書いてるのにattachedというモデルが存在しない。
そもそも書き方も他のリレーションメソッドと違う?

## 調査結果
has_one_attachedで一つのメソッド。
レコード一件に一個のファイルを添付できます。

例えばユーザーのモデルにこう書きます

“`
class User < ApplicationRecord has_one_attached :example end ``` 以下のようにすると、ファイルをアップロードできます ``` <%= form.file_field :example %>
“`

以下のようにすると画像をがアップされているか確認できます
“`
user.example.attached?
“`

## 参考文献
Railsガイド. 「Active Storage の概要」, https://

元記事を表示

(ローカル環境)Rails における `devise + Omniauth` の Google 認証の導入メモ

# はじめに
* devise および OmniAuth に関連する資料は有志の方々によって作成されていますが、いざ自分が導入するとかなり時間を要したため自分のためにも記事にしました。尚、ご指摘箇所がございましたらご教授いただけますと幸いです。
* 随時更新する予定です

## 現状および前提条件など
### 現状
https://qiita.com/nakad119/items/967e53ace5788afdbcc1

* 上の記事の通り、「devise は導入した」まで作業を進行したことを前提としている
* `devise`によって生成される devise モデルではなく、既に作成していた User モデルを利用した形

### 前提条件など
* 開発環境について以下に列挙
* Windows11 Home 24H2
* Ubuntsu
* Docker
* VScode
* Rails7.2.1
* devise4.9

* `Devise` では `users` テーブルでユーザー情報を管理しているため、**モデルは `

元記事を表示

Google Analytics(GA4) の導入から特定IPアドレスの除外まで【Rails】

## **はじめに**

はじめまして、kzkio([@kzkio_0114](https://x.com/kzkio_0114))と申します。

まず、初学者の記事に足を運んでいただきありがとうございます。

今回は、アウトプットを兼ねて、**Google Analytics(GA4) の導入方法と**特定IPアドレスの除外を記事にしました。

特定IPアドレスの除外を試みた際、公式ドキュメントを参考にしながら設定を進めましたが、上手くいかず時間がかかりました。そのため、**初学者でもスムーズに設定できるよう、シンプルでスクリーンショットを取り入れた手順**を自分なりにわかりやすくまとめることにしました。

:::note warn
留意点:
記事作成用に、アナリティクス アカウントとアプリを作成しているため、できる限り伏せ字を減らし、わかりやすさを重視しています。ただし、地域やIPアドレスなどの情報はセキュリティ上の理由で非公開としていますので、ご了承お願いします!
:::

### **用意するもの**

– 使用するアプリ(今回はRailsで作成したアプリを使用)
– Goog

元記事を表示

【Rails】extract_options!メソッドの挙動と使われるところ

## はじめに

Railsのコードリーディングをしていたところ`extract_options!`というメソッドの存在を知りました。

この記事では`extract_options!`の挙動について、Railsのコードで使われている箇所とともにまとめます。

## `extract_options!`メソッドとは?

`extract_options!`メソッドは、配列の最後の要素がハッシュであればそれを取り出し、残りの配列を返すメソッドです。

メソッド名の末尾の`!`が示すように元の配列を破壊的に変更する点に注意が必要です。

サンプルコードで確認します。

“`ruby
sample-app> params = [:name, :age, { city: ‘Tokyo’, country: ‘Japan’ }]
=> [:name, :age, {:city=>”Tokyo”, :country=>”Japan”}]
sample-app> options = params.extract_options!
=> {:city=>”To

元記事を表示

bundle install 後にも「Could not find gem名」エラーが発生したため、それを自動解決するスクリプトの紹介

## Railsでの「Could not find gem名」エラーを自動解決するスクリプトの紹介

Railsアプリケーションを開発していると、`bundle install` 後に `Could not find gem名` というエラーが発生することがあります。このエラーが出るたびに個別のgemを手動でインストールするのは手間がかかるため、エラーを検出して自動でgemをインストールするスクリプトを作成しました。

### スクリプトの内容

以下のスクリプトは、Railsサーバーの起動を試み、`Could not find` エラーが発生した場合に不足しているgemを自動的にインストールするものです。

“`ruby
# start_rails_server.rb
def install_missing_gem(error_message)
gem_name_with_version = error_message.match(/Could not find (\S+) \(([\d.]+)\)/)
if gem_name_with_version
gem_n

元記事を表示

Railsバージョンアップ時にCompass gemの削除について

Railsのバージョンアップを行った際、**Compass gem**が原因でエラーが発生したため、該当のgemを削除した手順をまとめます。

### 背景
– Railsアプリのバージョンをアップデートしたところ、`File.exists?` に関するエラーが発生しました。
– エラーメッセージを確認すると、**Compass gem**が原因であることが判明しました。
– `File.exists?` は最新のRubyバージョンでは非推奨となり、代わりに `File.exist?` を使用する必要があります。
– Compass gemは現在メンテナンスされておらず、更新が期待できないため、削除を決断しました。

### 対応手順
以下の手順でCompass gemを削除しました。

1. **GemfileからCompassの記述を削除**
`Gemfile` から `compass` の記述を削除します。

“`
# Gemfile
– gem ‘compass’
“`

2. **`bundle install` の実行**

元記事を表示

Ruby 3.3 の RSpec 内の Capybara で ArgumentError が発生する問題の解決法

# 環境
| ミドルウェア | バージョン |
| — | :—: |
| Ruby | 3.3.5 |
| Rails | 6.1.7.9 |
| RSpec | 3.13.0 |
| Capybara | 3.40.0 |

Rails 以外は現時点(2024 年 10 月 23 日現在)では最新版の環境における情報です。

# 問題
Ruby 3.0.7 から Ruby 3.3.5 にアップデートしたあと RSpec を実行すると Capybara を使用している部分で ArgumentError が発生するようになりました。

“`ruby:foo_spec.rb
RSpec.describe ‘/foo’, type: :request do
context ‘foo’ do
let(:html) { Capybara.string response.body }

it “displays the flash message” do
expect(html).to have_css ‘.success’, text: ‘Fiel

元記事を表示

OTHERカテゴリの最新記事