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

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

Railsでのユーザー認証の実装とbcryptの活用方法

## 流れ

### 1. Userのモデルとコントローラーを準備する

“`ruby
rails g model user username:string password_digest:string
“`

“`ruby
rails g controller users
“`

“`ruby
rails db:migrate
“`

以下のファイルが生成されます:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/b76bc216-0e70-8824-13e6-2aa70659953d.png)

`users_controller.rb`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/38a56c5c-bb43-6430-b46c-4720f1c0165c.png)
`user.rb`

`user.rb` に以下のメソッドを追加します:

元記事を表示

[Ruby 3.1.4] 関数の可変長引数のに *array 展開で SystemStackError

[SystemStackError]:https://docs.ruby-lang.org/ja/latest/class/SystemStackError.html
[ArgumentError]:https://docs.ruby-lang.org/ja/latest/class/ArgumentError.html
[NoMethodError]:https://docs.ruby-lang.org/ja/latest/class/NoMethodError.html
[組み込みライブラリ]:https://docs.ruby-lang.org/ja/latest/library/_builtin.html
[Hash#values_at]:https://docs.ruby-lang.org/ja/latest/method/Hash/i/values_at.html
[ruby 3.3 – ruby/hash.c L:2710]:https://github.com/ruby/ruby/blob/ruby_3_3/hash.c#L2710

:::note warn
この記

元記事を表示

Rails – 全てのエラーを rescue_from で吸収する例

# コード例

StandardError を rescue_from することで、全てのエラーを巻き取れそうだ

“`rb
class ExampleController < ApplicationController rescue_from StandardError do render status: :ok end def index raise ActiveRecord::RecordInvalid end end ``` # 備考 たとえば `ActiveRecord::RecordInvalid` の祖先を見ると、次のようになっているが、この中の親のどれかを rescue_from しておけばエラーを巻き取れるということのような気がする ( たぶん ) ただしもちろんエラークラス以外を rescue_from してしまうのは宜しくないだろう ```rb ActiveRecord::RecordInvalid.ancestors # [ # ActiveRecord::RecordInvalid, # ActiveRecor

元記事を表示

[bootstrap5]本番環境でドロップダウンが動かない問題(TypeError: t.createPopper is not a function)

## 目的
Rails7でwebアプリを開発している際に開発環境でbootstrap5を使用してました。

本番環境にデプロイしてみるとドロップダウンの機能が動かなかったので
その問題解決時に得た情報を備忘録として残します。

Rails7にbootstrap5を導入する記事がネット上に多くありましたが
どれも自分の環境では動かなかったので自分と同じように困っている方の役に立てれば幸いです。

## 開発環境
Rails 7.0.4.3
ruby 3.1.4
bootstrap 5.3.3

## 動かなかった時の状態
前に[こちら](https://qiita.com/ruby_of_pokemon/items/2a5452bcd5db0d12a230)の記事でPopper.jsのエラー解決方法を紹介したのですが、開発環境では問題なく動いていました。
しかし、いざ本番環境にデプロイするとbootstrapのドロップダウンが動きませんでした。

ちなみに本番環境でドロップダウンを押した際にブラウザのコンソールで出たエラーがこちらになります。

![スクリーンショット 2024

元記事を表示

Rubyで配列内のハッシュで同じキーの値を合算(inject、merge)

ポートフォリオ作成中に、「同一のキーを合算して、値を求める」必要があり、実装に時間を要したため、備忘録として投稿します。

## 実現したいこと

“`ruby
data = [
{ water: 9, retort_food: 3, mask: 3 },
{ water: 10, retort_food: 4, mask: 4 },
{ water: 11, retort_food: 5, mask: 5 }
]

# 上記のデータで同じキーのものを合算
# data = { water: 30, retort_food: 12, mask: 12 }
“`

## 完成形
“`
merge_data = data.inject do |old_data, new_data|
old_data.merge(new_data) do |_key, old_val, new_val|
old_val + new_val
end
end
“`
## 使用したメソッド

### inject
> 配列等の要素を一つずつ繰り返して、ブロック内で処理する

元記事を表示

CORS設定でOPTIONSリクエストとヘッダが取得できない

実装中に対応した内容を備忘録として投稿します。

## 発生した問題

フロントエンド(Nuxt.js)から、バックエンド(Rails)に対して、APIリクエストを投げるとCORSエラーが発生。
“`
Access to XMLHttpRequest at ‘http://localhost:3000/users/1’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
“`
## 原因

– ブラウザ側のセキュリティが強化されていて、意図しない挙動を防ぐために実装されている。
– もし仮に、ハッキングされるなどすると、
– フロントエンドとバックエンドでサーバーやドメインが別れている場合に、悪意のあるドメインにすり替えるなどができてしまう。
– 会員制サイトでログインするときに、ログインIDやパスワードを盗むことができてしまう。

元記事を表示

【Rails】debrideで未使用のメソッドを検出する方法

debrideというGemを使用することで未使用の可能性のあるメソッドを検出できます。

https://github.com/seattlerb/debride?tab=readme-ov-file

## 導入方法
Gemfileに以下を追記し、`bundle install`します。

“`Gemfile:Gemfile
group :development do
gem “debride”, “~> 1.12”, require: false
end
“`

ターミナルで以下のコマンドを実行し、ホワイトリストを作成します。

“`terminal
$ rails routes > routes.txt
$ debride_rails_whitelist routes.txt log/production.log | sort -u > whitelist.txt
$ echo up >> whitelist.txt
$ echo down >> whitelist.txt
$ echo change >> whitelist.txt
$ bundle exec deb

元記事を表示

rails sが起動しなくなった

`rails s`が動かない現象に遭遇したので、備忘録として投稿します。

## 発生した問題

下記エラーにより、`rails s`が起動しなくなった。

“`
% rails s
=> Booting Puma
=> Rails 6.1.5 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
bin/rails:7: warning: already initialized constant APP_PATH
/Users/xxxx/workspace/app/bin/rails:7: warning: previous definition of APP_PATH was here
The most common rails commands are:
generate Generate new code (short-cut alias: “g”)
console Start the Rails co

元記事を表示

RailsのHostAuthorizationによってELBのヘルスチェックがhealthyにならない

ポートフォリオをデプロイする際に発生した問題について、備忘録として投稿します。

## 発生した問題

Rails6 + AWSで下記の構成のようなアプリを開発していました。

Railsの`HostAuthorization`を利用し、`/api/health_check`というパスでALBからのヘルスチェックを行おうとしました。
しかし、Railsが403エラーを返し、ヘルスチェックが失敗してしまいました。

## 原因

Railsの設定は下記のようになっていました。
![](https://raw.githubusercontent.com/nomikazu-x/post-zenn-qiita/master/images/prettier-plugin-astro-organize-imports/alb-esc-nginx-rails-rds.jpg)

“`ruby:environments/production.rb
config.hosts << 'base_domain.com' ``` 原因は、 「ヘルスチェック時のホスト名がbase_domain.comでな

元記事を表示

備忘録 Docker・Rails7・TailwindCSS・DaisyUIでFly.ioにデプロイできる環境構築

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして働き始めて約4ヶ月弱が経過しました🐣

## 概要
下記環境で、[Fly.io](https://fly.io/)にデプロイまでできる環境構築についてまとめました。

### 環境
– Mac OS(Apple Silicon)
– Docker
– Ruby on Rails (Ruby 3.2.3、Rails 7.1.3)
– Tailwind
– DaisyUI
– PostgreSQL(Fly Postgres)
– [Fly.io](https://fly.io/)にデプロイ

:::note warn
間違っている箇所や、紹介した方法よりも良い方法があるかもしれませんので、その際は教えて頂けると嬉しいです🙇
:::

## 環境構築手順
### Docker環境構築
1. `touch Dockerfile`を実行します。
Dockerfileの中身は以下のとおりです。
“`Docke

元記事を表示

Ruby, Ruby on Railsのselectメソッドについて

### 読んで欲しい人

– selectメソッドがわからない人
– 過去の自分

### 動作環境

– ruby 3.3.0
– Rails 7.1.3.3

### selectとは

– Enumerableモジュールの一部
– 文字列、配列、ハッシュに対して検索を行えるメソッド

**Enumerableモジュールとは**

– 繰り返し処理を行うためのモジュール

Enumerableモジュールに定義されているメソッドは全て`each`を用いて定義されてる。

`each`を基盤として、より複雑な操作を簡単に行うための道具箱がEnumerableモジュールという感じ。

### モデルに使う時

前提:下記のusersテーブルがあるとする

|id |name |email |
|—|—|—|
|1 |jojo |jojo@example.com |
|2 |dio |dio@example.com |
|3 |hoge |hoge@example.com |

普通に情報を取得すると下記

“`ruby
User.all

# 発行さ

元記事を表示

備忘録 Docker・Rails7・BootstrapでRenderにデプロイできる環境構築

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして働き始めて約4ヶ月弱が経過しました🐣

## 概要
下記環境で、[Render](https://render.com/)にデプロイまでできる環境構築についてまとめました。
実際に自分がデプロイまでしたアプリのコードはこちらです。
Stimulusの練習のために作成したミニアプリです🍎

https://github.com/satou-haruka-37/fruit_forest

### 環境
– Mac OS(Apple Silicon)
– Docker
– Ruby on Rails (Ruby 3.2.2、Rails 7.0.8)
– Bootstrap
– DBを使用しないミニアプリ作成のための環境だったため、DBはSQLite使用
– [Render](https://render.com/)にデプロイ

:::note warn
間違っている箇所や、紹介した方法よりも良い方法があるかもしれませんので

元記事を表示

【未完】画像アップロードするfile_fieldのCSSを変えて、選択したファイル名を表示させたい

# はじめに
Rails勉強中です。
Active Storageで画像のアップロード機能を導入したけど、デフォルトのボタンのデザインから変更するために一苦労、さらに選択した画像のファイル名を表示するために苦戦している最中です。

ここまでの経緯を一応残しておこうかなと思います。

# Active Storageの導入
Acrive Strageの実装は、こちらの記事を参考にしました。
https://qiita.com/trafford_777/items/339ac0416b1505fa0fc6
https://prograshi.com/framework/rails/active-storage/#google_vignette

Active Strage導入時点のfile_fieldのデザインでは、ファイル名は表示されているようです。

# file_fieldのデザイン変更
デザインの変更は、こちらの記事を参考にしました。
https://qiita.com/Yukina_28/items/4a8332354f6cb7c7a6f6

file_field自体のCSSは変

元記事を表示

カラム名.present?の省略方法

下の記事の内容は正しくありません。
~~カラム名.present?の省略方法がActiveRecordで元から用意されていたので、自分用に残しておきます。~~

“`ruby
user = User.first
user.name? # user.name.present? と同意
# => true / false
“`

~~rails cの補完機能を使っていると見つけました。
このような元から用意されてある動的なメソッドは、まだまだたくさんあるみたいなので、もっと勉強していこうと思います!~~

元記事を表示

Rspec WrongScopeError発生

Rspecでテストを走らせた際に発生した問題について、備忘録として投稿します。

## 発生した問題

“`
Failure/Error:
raise WrongScopeError,
“`#{name}` is not available from within an example (e.g. an ” \
“`it` block) or from constructs that run in the scope of an ” \
“example (e.g. `before`, `let`, etc). It is only available ” \
“on an example group (e.g. a `describe` or `context` block).”

`name` is not available from within an example (e.g. an `it` block) or from construct

元記事を表示

【Rails】ユーザー認証と認可の基本

# はじめに

こんにちは!
新卒1年目の石川です。
記事をご覧いただきありがとうございます。

この記事では、ユーザー認証と認可の基本を説明します。
Webアプリケーション開発において、ユーザー認証(authentication)と認可(authorization)は非常に重要なセキュリティ機能なので整理してみました。
ぜひ最後までご覧ください!

:::note warn
今回は主に機能の流れを説明します。ロジックの主要部分がコントローラとヘルパーに集中しているため、モデルとビューについてこの記事では触れません。
:::

## 目次
1. [ユーザー認証 (Authentication)](#1-ユーザー認証-authentication)
・[ユーザー登録](#ユーザー登録)
・[ログイン/ログアウト](#ログインログアウト)

2. [ユーザー認可 (Authorization)](#2-ユーザー認可-authorization)
・[アクセス制御](#アクセス制御)
・[フレンドリーフォワーディング](#フレンドリーフォワーディング)
・[フレンドリーフォワーディングの

元記事を表示

[個人開発]チャット形式の英語日記システムをRailsとDockerで開発してみた (上) – 導入と開発環境

どうも、3月に卒業できなくて9月に卒業予定の現役大学生です。
Qiitaで初めての投稿ですので温かい目でみていただけたら幸いです。

今回はrailsとChat GPT APIを用いてチャット形式の英語日記システムを作成してみました。
何か間違いやアドバイスがあればぜひ!
少し長くなりそうなので上、中、下の三本でお届けします。
こんな形で投稿すると思ってなかったのでなんでこんなプログラムにしたかなど結構忘れてます。すみません

## 開発の経緯
まずなんで開発してみようと思ったかから
開発の目的は英語の勉強において日記の作成は有効らしからやってみたけど書くネタなくて全然続かんくね?てか俺の英文正しいの?と思って毎日続けられて、英文評価してくれるようなシステムあれば便利やなと思ったからです。

## システム概要

### 目的
– **英語学習者が日記を書くことでライティングスキルを向上させることを支援する。**

### 機能
1. **チャット形式での日記入力**
– ユーザーはチャット形式で日記を入力することができ、直感的に操作でる。
2. **リアルタイムフィードバック*

元記事を表示

importmapのhelpで出てくるコマンドを試してみた

## はじめに
railsのimportmapを使っていて、そういえばpin以外にどういうコマンド使えるのかと思ったので、使ってみたいと思います。

## importmapのコマンド
### importmap help [COMMAND]
利用可能なコマンド、または指定された特定のコマンドの詳細な説明を表示する。
利用可能なコマンドを表示
“`bash
$ docker compose run –rm web ./bin/importmap help

Commands:
importmap audit # Run a security audit
importmap help [COMMAND] # Describe available commands or one specific command
importmap json # Show the full importmap in json
importmap outdated # Check for outdated p

元記事を表示

[Rails] 単一ファイルのRailsアプリケーションを作ってみた

# はじめに

週刊Railsウォッチ: Ruby on Jets 6.0がRailsをサポートほか(20240620後編)

上記の記事で、気になる箇所がありました。

**1ファイルで動くRailsアプリケーションを作った**

これを見た時の自分は、「え?そんなことできるの?」と思いました。

https://greg.molnar.io/blog/a-single-file-rails-application/

上記記事の記載があったので、参考にして自分も作ってみました。
その内容をアウトプットいたします。

# 実装
## 環境
– Ruby:3.2.2

お好きなディレクトリで、`app.ru`を作成します。

“`rb:app.ru
# frozen_string_literal: true
require ‘bundler/inline’

gemfile(true) do
source ‘https://rubygems.org’

gem ‘rails’, ‘7.0.4’
gem ‘sqlite3’, ‘~> 1.4’
gem ‘puma’
en

元記事を表示

Rails7.2で出る新機能を紹介 & どう実装されているかみてみる

## はじめに

Rails7.2の新機能について気になったので調べてみました。

Rails 7.2の新機能は、[Ruby on Rails Guides](https://edgeguides.rubyonrails.org/7_2_release_notes.html)を参考にしていきす。
現時点だと、7.2.0.beta2までしか出ていないですが、この時点までのでまずは書いてきます。

## rails new myapp –devcontainer
rails newに `–devcontainer` オプションが追加されました。

devcontainerを用意できるようになりました。

コードで言うと[この辺り](https://github.com/rails/rails/blob/de53ffd6a121b6772afc5be4eafeb4cdb333b4e3/railties/lib/rails/generators/app_base.rb#L114-L115
)です。

“`ruby
class_option :devcontainer,

元記事を表示

OTHERカテゴリの最新記事