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

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

【Rails】furimaアプリ 商品出品機能実装 #3

# 実装概要
– itemモデルの単体テストを実施

### item情報をFactoryBotで指定
“`ruby:spec/factories/items.rb
FactoryBot.define do
factory :item do
name { Faker::Name.initials(number: 2) }
description { Faker::Lorem.sentence }
category_id { 2 }
status_id { 2 }
shipping_fee_id { 2 }
prefecture_id { 2 }
delivery_time_id { 2 }
price { 500 }

association :user

after(:build) do |message|
message.image.attach(io: File.open(‘public/images/test_image.png’), filename: ‘test_image.p

元記事を表示

【Rails】furimaアプリ 商品出品機能実装 #2

# 実装概要
– JavaScriptを使用して商品出品ページの販売価格を入力すると販売手数料(10%)と販売利益が自動で表示される機能の実装。
– データが保存され、エラーがある際はエラー文が表示される機能の実装。

### jsファイルの作成
app/javascriptディレクトリ配下にitems_new.jsファイルを作成。

### items_newファイルの読み込みができるように設定

items_new.jsファイルをアプリに「ピン留め(固定)」し、ページや機能の中で使えるようにするため下記コードを追記。
“`ruby:importmap.rb
# 中略
pin “items_new”, to: “items_new.js”
“`
### items_new.jsの機能を実際に使うために読み込むコードを追記
“`ruby:app/javascript/application.js
# 中略
import “items_new”
“`

### items_new.jsファイルの編集
“`ruby:app/jabascript/items_new.js
docu

元記事を表示

alba用の”rails g alba hoge”みたいなジェネレータを作った

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

今日は昨日初めて知ったRailsの自作ジェネレータを実際に使ってみたということで練習がてら作ってみました

昨日の時点で便利では?と思ったので今後も使っていきたいと思います

ちなみにalbaはこれです。Railsのシリアライザ?です。

https://github.com/okuramasafumi/alba

# 経緯
今作っているXクローン用に昨日ずっとRailsのSerializerを探していて、jsonapi-serializerとか色々触ってみたのですがどれも「うーん」ということで辿り着いたのが **alba**でした。

その時の体験記がこれです。

このついでに毎回ファイル手動で作るのだるいとなって`rails g serializer`があることを知り、さらにこの”ジェネレータ”自体が自分でも作れるのを知りました。

で、albaが見てみた感じなさそうだったのでその時得た知識をもとに作ってみよう

元記事を表示

【Rails】RSpecとCapybaraの違いがわからなかったので調べました by Genspark & GPT-o1-mini

どうもこんにちは。

Kaigi on Railsに参加していて、CapybaraとRSpecの違いがわかっていなかったので、AIで調べてみました。

:::note warn
この記事は**ALL 生成AI**で作ってみました。
:::

## はじめに

ソフトウェア開発において、テスト自動化は品質向上と開発効率の向上に欠かせない要素です。RubyやRuby on Railsでの開発において特に人気のあるテスト自動化ツールとして、**RSpec**と**Capybara**があります。本記事では、これらのツールの概要や役割の違い、具体的な使用方法について詳しく解説します。

### RSpecとは

**RSpec**は、RubyおよびRuby on Railsアプリケーションのテスト自動化を支援するためのフレームワークです。RSpecを使用することで、ユニットテスト、機能テスト、統合テストを効率的に記述・実行することが可能になります。RSpecは、以下の特徴を持っています:

– **ユニットテストのサポート**: 個々のメソッドやクラスの動作を検証します。
– **機能テストの

元記事を表示

Google Cloud が提案するベストプラクティスに沿ったデータベース設計

Google Cloud blog が公開している [ユーザー アカウント、認証、パスワード管理に関する 13 のベスト プラクティス2021 年版](https://cloud.google.com/blog/ja/products/identity-security/account-authentication-and-password-management-best-practices) (以下、元記事)を参考にして、特にデータベースに特化した実装案を考えてみる。

## 認証要素の分離と内部グローバル ID の活用

元記事では、データベース設計のベストプラクティスとして「柔軟なユーザー管理のために認証要素を分離すること」と「そのためには内部グローバル ID を活用すること」が紹介されている。

上記の要素について言及している箇所を抜粋する。

> ユーザー ID とユーザーアカウントのコンセプトを分離する。(中略)適切に設計されたユーザー管理システムでは、ユーザーのプロファイルの各部分間の結合度が低く、凝集度が高くなる。(中略)各ユーザーに抽象的な内部グローバル ID を設定

元記事を表示

Rakeタスク...タスク(作業)の自動化について

# はじめに
この記事は、Ruby on rails 初心者が備忘録として作成したものです。なにか間違い等ありましたら、ご指摘よろしくお願いします。

# Rakeタスクとは?
– **Rubyコードでタスクとして作成し、必要なときに実行することができる**
 => Rake は Ruby のビルドツールで、タスク(作業)を自動化
– **この時に実行する処理内容がrakeタスク**
 =>`Rakefile`に定義
– **Rake タスクの用途**
 =>データベースの初期化や更新
   定期的なデータのクリーンアップや集計
   バッチ処理の実行
   テストの実行や自動化されたタスクの実行 等々…

`要するに、定期的なメール送信、古いデータのクリーニング(例:x日以上経ったログデータや不要なキャッシュを削除する処理)、記事等の自動公開が可能に。`

– **Rake と Whenever の連携**
Rakeタスクは単体では手動でコマンドを実行する必要がありますが、Wheneverを使うと、任意のタイミングで自動で実行できるようになる。
#

元記事を表示

Ruby on Railsの自分用覚書

## 1.コントローラ(Controllers)
ファイル場所:`app/controllers/`
ユーザーからのリクエストを受け取り、モデルやビューと連携する。
“`users_controller.rb
class UsersController < ApplicationController def index @users = User.all end def show @user = User.find(params[:id]) end end ``` ## 2.モデル(Models) ファイル場所:`app/models/` データベースとやり取りするためのクラス。ActiveRecordを使う。 ```user.rb class User < ApplicationRecord validates :name, presence: true end ``` ## 3.ビュー(Views) ファイル場所:`app/views/` HTMLやJSONなどの出力をする。コントローラから渡されたデータを使って表示。 ```app/vie

元記事を表示

Rails ActiveRecordの自己結合:タスク管理アプリ

## 読んで欲しい人
– Railsで自分のテーブルを参照してリレーションを組みたい人
– 例:Userモデル内でそれぞれ役職があって、その関係性を表現したい!
– 上司と部下
– プロジェクトとタスク
– 過去の俺
## 今回のケース
– タスク管理アプリでTaskがTaskを無限に持てるようにしたいなぁ
## やり方
“`ruby
class Task < ApplicationRecord has_many: sub_tasks, class_name: 'Task', foreign_key: 'parent_id', dependent: :destroy belongs_to :parent, class_name: 'Task', optional: true end ``` ## 解説 ```ruby has_many: sub_tasks, class_name: 'Task', foreign_key: 'parent_id', dependent: :destroy ``` - TaskはTaskを複数持てるをそのまま、has_many :t

元記事を表示

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_rails –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’
e

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事