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

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

実際に動かしてみてわかった、N+1問題の恐ろしさ

## はじめに
ご閲覧いただきありがとうございます!
Sun* という会社で Backend Engineer をやっている 24 卒の Campanule と申します。
普段は Ruby on Rails を使った Web アプリの開発を行っております。

今回が初投稿となります。どうぞお手柔らかにお願いいたします。

本記事ではデータベースを用いる際にいつも頭を悩まされる **N+1 問題** について簡単に説明し、またパフォーマンスの簡易的な測定をしてみようと思います。

## 目的
– N+1 問題 とは何なのかざっと理解したい
– パフォーマンスの測定を行い、N+1 問題 の影響について考えたい

## 想定読者
– N+1 問題 を知らない方、あるいは言葉だけ聞いたことがある方
– N+1 問題 によるパフォーマンスの低下が気になっている方

## N+1 問題とは
こちらがわかりやすいです。

https://qiita.com/muroya2355/items/d4eecbe722a8ddb2568b

簡単に言うと、あるテーブルのレコード N 件 に対応した別テーブル

元記事を表示

[Rails] Rspec_Anonymous Controllerを使用して、Application Controllerのテストをしよう!

# はじめに
`ApplicationController`では、ユーザーのロール(役割)に対して、アクセス制御を行っていると思います。
では、そのアクセス制御をテストしようと思った時に、どのように実装しますでしょうか?

– requestテストでやろう!
– でも、`ApplicationController`へのルーティングは通っていないよね…
– アクセス制御をしている箇所を`Concern`に切り分けて、単体テストでやろう!
– これは結構良さげ
– ただ、切り分けるほどの処理の大きさでもない…

上記のように、色々と模索すると思います。
その中で、`AnonymousController`を使用すれば、実装を変えずにテストすることができます。

今回はその内容をアウトプットいたします。

:::note warn
Rails5からは、`request spec`が推奨されています。
今からは、`controller spec`になるので、ご了承ください。
:::

https://qiita.com/t2kojima/items/ad7a8a

元記事を表示

railsのcreateでPostman使ってみた

## はじめに
最近、PostmanというAPIの開発をサポートしてくれるツールを知ったので使ってみようと思います。

## Postmanとは
公式より
>Postman は、 API を構築および使用するためのAPI プラットフォームです。Postman は、API ライフサイクルの各>ステップを簡素化し、コラボレーションを効率化することで、より優れた API をより迅速に作成できるようにします。

公式に書いてある通り、PostmanはAPIの開発やテスト等をサポートするツールです。
実際にAPIにGETやPOSTを行い、リクエストやレスポンスを受け取ることができます。

## Postmanでrailsのcreateを行う
実際に、Postmanを使ってみようと思います。

### Postmanをダウンロード
まずはPostmanをダウンロードします。

https://www.postman.com/downloads/

### lightweight API clientで入る
lightweight API clientと表示されているところをクリックすると、アカウン

元記事を表示

【Render × Xserver】独自ドメインでのデプロイ時の注意点と解決策

# はじめに
本記事では、「**Render**」にデプロイしたアプリを独自ドメインで公開する際の注意点と解決策についてまとめます。今回は、「**お名前.com**」での**ドメイン取得**ができなかったため、以前契約していた「**Xserver**」を利用しました。

この記事が皆さんのお役に立てば嬉しいです!

https://www.xserver.ne.jp/

https://www.onamae.com/

# 前提/条件
– rails7系
– ruby3.2.3
– PostgreSQLを使用
– Renderでデプロイ済み
– Xserverでドメイン取得される方

# 注意点

### XserverでDNSレコード画面で「DNSレコードの確認・設定を行うことができません」表示

![Xserver-error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772961/024ae093-eeb1-2cd6-f3d8-4dcfb18d3a75.png)

DNSレコードの表示ができ

元記事を表示

RailsでOmniAuth-GitHubを利用してログインをしようとした時に、turboが邪魔をしてgithubのログイン画面にいけなかった現象について。Not found. Authentication passthru.

## 読んで欲しい人
– 下記の記事を参考に開発を進めていて`Not found. Authentication passthru.`の表示になった人
– https://fuga-ch85.hatenablog.com/entry/2021/04/10/075536
– https://github.com/heartcombo/devise/wiki/OmniAuth:-Overview
– 過去の俺

## 動作環境

– ruby 3.3.0
– Rails 7.1.3.3

## ハマった現象

– 上記で紹介した「omniauthを使ってgithub認証を実装する」の設定が一通り終わり、いざ`user_github_omniauth_authorize_path`リンクを設置して、ボタンを押した時に`Not found. Authentication passthru.`という文言が出てきて、githubの認証画面に遷移できない状態

ボタンの画面
![image.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

[個人開発] 食品の在庫を簡単に管理できるサービスを作ってみました

## はじめに

こんにちは。ryosuke([@ryousuke_doi](https://x.com/ryousuke_doi))と申します。現在プログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

今回リリースしたサービスの紹介と開発の振り返りをまとめてみました。
記事を書くのが初めてなので、温かい目で見ていただけると幸いです。また、技術的な部分での誤りやサービスについての感想などありましたら、コメント等で教えていただけると助かります。
## 作成したサービスの紹介
[![Image from Gyazo](https://i.gyazo.com/385a7078b695448cfef79567d7cd142b.jpg)](https://gyazo.com/385a7078b695448cfef79567d7cd142b)

### サービスURL(レスポンシブ対応済み)

https://pantry-chef-notifier.onrender.com

https://github.com/ryo-mogura/Pantry-Che

元記事を表示

37signalsが書くコードの”Service Object”を見てみる

## 挨拶

自称、Ruby on Rails フロントエンドエンジニア🤣のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaも頑張り始めました。

それでは早速本題です!

## ええっ!!??
37signals商品のRailsコードって見られるの?

そう!Ruby on Railsを開発した37signals社が、どのようにこのフレームワークを活用し、どのようなコードを書いているかを見ることができるのだ!

細かい話は省くが、7月3日に37signals社は[Writebookというアプリを新規に公開した](https://world.hey.com/jason/introducing-writebook-e217cae3)。自由にダウンロードでき、自分でサーバ(例えばさくらインターネットのサーバとか)を用意すれば、[簡単にインストール](https://books.37signals.com/2/the-writebook-manual/27/installation)できる。(

元記事を表示

[作成中]RSpecについて初学者段階のメモ

※間違いなどございましたらご指摘いただけると幸いです
※随時更新予定

# 概要
以下、https://semaphoreci.com/community/tutorials/getting-started-with-rspec より引用
> RSpec is a testing tool for Ruby, created for behavior-driven development (BDD). It is the most frequently used testing library for Ruby in production applications.
「RSpec は、ビヘイビア駆動開発 (BDD) 用に作成された Ruby のテスト ツールです。本番アプリケーションで最も頻繁に使用される Ruby のテスト ライブラリです。」(Google翻訳)

– `RSpec`はRailsアプリケーションの開発で利用するテストツール
– Railsに最初から搭載されている”minitest”というテストツールも存在するが、RSpecが実質デファクトスタンダードとされ

元記事を表示

Rails + I18n – バリデーションエラーの言語を強制指定する例

# 翻訳設定

てきように用意しておく

以下は英語翻訳で、

– 属性に対しての翻訳
– ひとつのモデルに対してのエラーの種類の翻訳

を指定した例

`api/config/locales/activerecord.en.yml`

“`yml

en:
activerecord:
attributes:
example:
foo: localed foo
errors:
models:
example:
blank: IS BLANK!
“`

# Rails Console で試す

英語指定の場合

“`rb
I18n.locale = :en
“`

“`rb
example = Examole.new # 何か不正なデータ状態
example.validate
puts example.errors.full_messages
“`

エラーメッセージの例

“`
[“localed foo IS BLANK!”]
“`

# Controller で試す

元記事を表示

Railsでのバリデーションの実装

# バリデーションとは
バリデーションは、データがアプリケーションの要件に適合していることを確認するための手段です。これにより、不正なデータがデータベースに保存されるのを防ぎます。例えば、ユーザー登録フォームでメールアドレスが正しい形式であることや、パスワードが一定の長さを満たしていることなどを確認するのが一般的です。
# Railsでのバリデーションの設定
Railsでは、モデルでバリデーションを設定するのが一般的です。以下に、Userモデルに対していくつかの基本的なバリデーションを設定する例を示します。
“`ruby
class User < ApplicationRecord validates :name, presence: true validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP } validates :password, length: { minimum: 6 } end ``` * presence: true:

元記事を表示

Railsのダウングレードの方法(技術選定でも役に立つようにする)

# なぜダウングレードするのか
***Bootstrapを導入する際に、Rails7だと自分以外でも導入するのに苦戦している人がいました***
(2024年7月現在)。なので、自分が使いづらいだけでなく、***現場でもRails6なら使ったことある人が多い(採用と他のエンジニアのキャッチアップの面)ので、Rails6に変更するという想定***で、
ダウングレード作業をすることにしました。

# 注意(基本現場では、バージョンは変えることはあまりない)
バージョンを変えたことでバグが発生することもあるので、あまり変えることは少ないです。

# 想定
Railsの7.0.4.3から6.1.7.1にダウングレードします。

# Gemfileの更新
Gemfileをダウングレードしたいバージョンに合わせます。ここでは以下のバージョンです。
“`Gemfile
# Bundle edge Rails instead: gem “rails”, github: “rails/rails”, branch: “main”
gem “rails”, “~> 6.1.7.1”
“`
上記を追記した

元記事を表示

【Ruby on Rails】Google APIを使ってSpread Sheetを操作する

いつも大変お世話になっている、
私が大好きなGem(というかGem集)

google-api-ruby-client

https://github.com/googleapis/google-api-ruby-client/blob/main/docs/usage-guide.md

仕事でもHeavy useしていたり、
趣味でもなんだかんだで使ったり、
ソースコードを読んで勉強させてもらったりと、
個人的には結構思い入れがある技術です

勝手に、もう記事を書いている気でいたが、
何も書いていなかったのでおさらいしとく。

## GCPでAPIを有効にする

まずは、GCPで使いたいGemのAPIを有効にしておく。

例えばSpread sheetなら、
Google Sheet APIを有効にしておく

![スクリーンショット 2024-07-09 21.53.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1290117/b9c67958-e365-dcaa-3665-d0151ee2c6

元記事を表示

【Ruby on Rails】画面読み込み時にレコードがDELETEされる

## はじめに
Ruby on Railsを学習しているのですが、画面読み込み時の処理(詳細は後述)で登録したレコードが消えるという現象が発生しました。
結論から言うと私の勉強不足、仕様の理解不足によるものでした。
解決にあたり、モデル、アソシエーションの理解が深まったところもあったので、記録として残すことにしました。
コードも冗長ですが、ご容赦ください。

## 開発環境
* Docker
* Ruby 3.3.3
* Rails 7.1.2

## 起:機能の実装

### ■機能の概要
ブックマークの管理機能を作成していた。
![スクリーンショット 2024-07-09 17.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737553/45217d30-5df2-4e22-b5de-ac2f9c2bee96.png)
(グレーの背景がカテゴリ、グリーンの背景がフォルダの中身)

これらはカテゴリ、フォルダ、ブックマークで要素が構成されている。
また階層イメージとしては以下の2種類が挙げ

元記事を表示

Next.jsとRailsを使った認証とエラーハンドリング

# 1. はじめに
ウェブアプリケーションの開発において、ユーザー体験を向上させるためには、認証の管理が重要です。今回は、ログインしていないユーザーでも投稿詳細を確認できるようにし、ログインしていないユーザー保存や応募ボタンを押すとログインを促す実装を行いました。この記事では、その際起きたエラーとそれに対するアプローチについて解説します。

# 2. 何をしたかったか

1. **ログインしていないユーザーでも投稿詳細を確認できるようにする**
– ユーザーがアプリケーションにログインしていなくても、投稿の詳細情報を閲覧できるようにしたい。

2. **保存や応募ボタンを押すとログインを促す**
– ユーザーが投稿を保存したり、応募したりするボタンを押した際に、ログインしていない場合はログインページにリダイレクトして、ログインを促すようにしたい。

これにより、ユーザーはログイン前に投稿の内容を確認でき、必要な操作を行う際に適切にログインを促されることで、よりスムーズで安全なユーザー体験を提供することができます。

# 3. セキュリティの考慮
認証に関する処理を適切に

元記事を表示

deviseのdevise_parameter_sanitizer.permitとconfig.authentication_keysで詰まった話

# TL;DR
認証キーと許可するパラメータの違いを把握していなかった。
– config.authentication_keysはdeviseの認証として使われるものであり、自動的にストロングパラメータとして登録されている
– devise_parameter_sanitizer.permitはストロングパラメータの設定であり、deviseの認証として使われるものではない

# 誤解していたこと
devise_parameter_sanitizer.permitとconfig.authentication_keysは同じもの!
↑誤りですので気をつけてください。。

つまり、
“`ruby:application_controller.rb
devise_parameter_sanitizer.permit(:sign_in, keys: [:name])
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
“`
“`ruby:config/initializers/devise.rb
config.authen

元記事を表示

Rails7.1、ruby3.34を詰まらずインストールしたい人へ

rubyのインストール中にライブラリ不足によるコンパイルエラーが複数回発生し、解消したら次のエラー、それも解消したらまた次の・・・のように無駄に時間がかかったので、スムーズにインストールできるようにまとめてみました。

## 環境
WSL(Ubuntu 22.04.4 LTS)

## 手順

### 必要なライブラリをインストール
“`console
sudo apt update -y
sudo apt upgrade -y
sudo apt install build-essential -y
sudo apt install -y libssl-dev libreadline-dev zlib1g-dev libyaml-dev libz-dev libffi-dev
“`
### rbenvとrubyをインストール
“`console
# rbenvをインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘

元記事を表示

Ruby技術者認定試験に合格してみて【Silver編】

## はじめに
2024年の6月27日に**Ruby Association Certified Ruby Programmer Gold version 3**(以下「Ruby Gold」)に合格しましたので、どのように勉強したのか、実際に役立ったのか等を**Silver編**と**Gold編**の二つに分けて記事にしようと思います。
Silverは90点で合格しました。

![スクリーンショット 2024-07-08 21.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636995/3ea1d68e-c013-4d17-1e75-c222c1cef8a5.png)

## Ruby技術者認定試験とは

Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。

### Silver
Rubyの文法知識、Rubyのクラスとオブジェクト、標準ライブラリの知識について、基

元記事を表示

[Rails] controllerで、configというメソッド名は使用するな!

# はじめに
`Controller`を実装中に、以下のエラーに遭遇しました。
`※ 多少表示を変えています。`

“`sh
undefined method `allow_forgery_protection’ for #
“`

心当たりのないエラーだったので、どのように解消するか悩みました。
今回は解消内容をアウトプットいたします。

# エラー原因
`Controller`内で`config`というメソッド名は、使用できませんでした。

https://qiita.com/ironsand/items/2834496d23380dc3f65d

今回自分が作成したメソッドは以下になります。

“`rb
def config
@config ||= Rails.application.config_for(:test)
end
“`

ymlファイルを呼び出すのをメモ化するために作成したメソッドの命名を、`config`にしていました。
それが、今

元記事を表示

GrapeでGETのクエリパラメータにArray[Integer]のTypeを使いたいときのメモ

# 概要
– GETのクエリパラメータにArray[Integer]を設定してみたがうまく動作しなかった
– そのときのメモ

Grapeはこれ

https://github.com/ruby-grape/grape?tab=readme-ov-file

# 結論

* `collectionFormat: ‘multi’` を追加する

“`ruby
requires :xxx, type: Array[Integer], documentation: { desc: ‘メモ’, type: ‘integer’, param_type: ‘query’, collectionFormat: ‘multi’ }
“`

この辺にドキュメントがある

https://github.com/ruby-grape/grape-swagger?tab=readme-ov-file#collection-format-of-arrays-

# 困ってたこと

* フロントエンドでGrapeが生成するyamlファイルを元に、ApiClientを生成していたが、リクエストすると `

元記事を表示

Railsのフォロー機能実装中にbelongs_toの書き方を間違えてActiveRecord::AssociationTypeMismatchエラーが出た話

## 読んで欲しい人

– belongs_toの書き方をちゃんとわかってない人
– ActiveRecord::AssociationTypeMismatchエラー出た人
– 過去の俺

## 動作環境

– ruby 3.3.0
– Rails 7.1.3.3

## やってたこと:悪い例

フォロー機能を実装してました。

– フォローする側:follower
– フォローされる側:followed

“`user.rb
class User < ApplicationRecord has_many :active_relationships, class_name: 'Relationship', foreign_key: 'follower_id', dependent: :destroy, inverse_of: 'follower' end ``` ※ フォローされる側の実装はしていない ```relationship.rb # このファイルの記述が間違ってた。 class Relationship < ApplicationRecord belongs_

元記事を表示

OTHERカテゴリの最新記事