Rails関連のことを調べてみた2023年11月02日

Rails関連のことを調べてみた2023年11月02日
目次

DeviseGemでのデフォルトバリデーションをテストしよう

## DeviseGemでのデフォルトバリデーションをテストしよう

DeviseGemは、Ruby on Railsアプリケーションでユーザー認証を簡単に実装できるツールです。しかし、デフォルトのバリデーションをテストしてアプリケーションのセキュリティとデータ整合性を確保することは非常に重要です。以下に、DeviseGemのデフォルトバリデーションをテストするための7つの具体的なテストコードを示します。

“`ruby
# 1. emailが空でないことをテスト
it ‘validates presence of email’ do
user = User.new(email: nil)
expect(user).not_to be_valid
end

# 2. passwordが空でないことをテスト
it ‘validates presence of password’ do
user = User.new(password: nil)
expect(user).not_to be_valid
end

# 3. パスワードが5文字以下でないことをテスト
it

元記事を表示

【Rails】APIにAlbaを導入する方法

## Albaについて
AlbaはJSONシリアライザーです。

https://github.com/okuramasafumi/alba

## 導入方法

以下の手順でRailsのAPIにAlbaを導入できます。

### インストールする

`Gemfile`に以下のように記述して`bundle install`を実行してインストールします。

“`Gemfile
gem ‘alba’
“`

“`terminal
bundle install
“`

### 設定ファイルを作成する

`config/initializer/alba.rb`を以下の内容で作成します。

“`config/initializer/alba.rb
Alba.backend = :active_support
“`

### resourcesディレクトリを作成する

`app/resources`ディレクトリを作成し、`user_resource.rb`を作成します。

“`app/resources/user_resource.rb
class UserResource
inc

元記事を表示

【ruby】値オブジェクトを使うと超読みやすくなるケース

# 年月の範囲をDateクラスで扱うのがダルい…

– 2023年1月、2023年2月…と月単位のラベルを持つグラフを作る
– 2023年1月号、2023年2月号…と月単位で提供される雑誌を扱う

といった、年月を扱うケースでは、ただのDateクラスではちょっと役不足ですよね。例えば以下のようなコードを考えてみます。

“`ruby
require ‘date’

start_year_month = Date.new(2023, 9, 1)
today = Date.today
latest_year_month = Date.new(today.year, today.month, 1)

#
# 期間でループしたいとき
#
tmp_month = start_year_month
while tmp_month <= latest_year_month pp tmp_month.strftime('%Y%m') tmp_month = tmp_month.next_month end # => “202309”
# => “2

元記事を表示

【個人開発】服好き・カフェ好きのためのショップ検索サービス「服カフェ」をリリースしました

## はじめに
こんにちは、@jinta_02と申します。
この度、服好き・カフェ好きのためのショップ検索サービス「服カフェ」をリリースいたしました!
完全未経験で初めての個人開発だったため苦労する点もありましたが、その中でも工夫した点をお伝えできればと思いますので、技術的な部分で誤りがありましたらコメント等いただけますと幸いです?‍♂️

## サービス名:[「服カフェ」](https://fuku-cafe.com)
[![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600084/e5cb45ea-dc3f-5198-f249-7fd21289d1f8.png)](https://fuku-cafe.com)

▼サービスURL:https://fuku-cafe.com

▼Github:https://github.com/jinta-shimo02/fuku_cafe

▼告知ツイート:https://twitter.com/jin_XXX222/status/171853523

元記事を表示

AWSのS3で本番環境でも画像を保存できるようにしよう。【vol1】

### 【概要】

AWSのS3についてのアウトプット(備忘)、また、これからはじめて触れるよ!って方の参考になればと思います〜。
設定に若干苦戦したのと、他の記事で情報の過不足の部分があったので初めての方でもわかりやすく設定できればと思います!!
(画面は2023年11月時点のものとなります。)

### 【対象】

・S3でクラウド環境に画像を保存したい。
・renderでdeployをしたい。(Herokuなどでも可ですが、環境ヘ変数の設定が少し異なります。)
・.envファイルで管理したい。(credentialファイルでも設定可ですが、今回は.envで管理します。)

### 【環境】

・Rails7系
・Ruby3.2.2
・CarrierWave導入済。(carrierwaveについては省略します。)
・Docker ver3
・render

### 【前提条件】

・[・AWSのS3で本番環境でも画像を保存できるようにしよう。【vol1】 ](https://qiita.com/iijima-naoya-45b/items/0bdf75bde

元記事を表示

AWSのS3で本番環境でも画像を保存できるようにしよう。【vol2】

### 【概要】

AWSのS3についてのアウトプット(備忘)、また、これからはじめて触れるよ!って方の参考になればと思います〜。
設定に若干苦戦したのと、他の記事で情報の過不足の部分があったので初めての方でもわかりやすく設定できればと思います!!
(画面は2023年11月時点のものとなります。)

### 【対象】

・S3でクラウド環境に画像を保存したい。
・renderでdeployをしたい。(Herokuなどでも可ですが、環境ヘ変数の設定が少し異なります。)
・.envファイルで管理したい。(credentialファイルでも設定可ですが、今回は.envで管理します。)

### 【環境】

・Rails7系
・Ruby3.2.2
・CarrierWave導入済。(carrierwaveについては省略します。)
・Docker ver3
・render

### 【前提条件】

・[・AWSのS3で本番環境でも画像を保存できるようにしよう。【vol1】 ](https://qiita.com/iijima-naoya-45b/items/0bdf75bde

元記事を表示

Ruby on Railsで使える画像処理ツール4選

# Ruby on Railsで使える画像処理ツールまとめ

Ruby on Railsのウェブアプリケーションで画像アップロードと処理が必要な場合、Active Storage、ImageMagick、MiniMagick、およびImageProcessingなどのツールが非常に役立ちます。この記事では、これらのツールについて詳しく説明し、どのようにプロジェクトに統合できるかについて説明します。

## 1. Active Storage

Active Storageは、Ruby on Railsの標準ライブラリで、ファイルのアップロードと管理を簡単に行うためのものです。これは、主に画像やファイルのアップロードをサポートし、アクティブレコードモデルと緊密に統合できます。これにより、データベース内のリンク、クラウドストレージプロバイダー(例: Amazon S3)、またはローカルファイルシステムなど、複数のストレージバックエンドとの連携が容易に行えます。

## 2. ImageMagick

ImageMagickは、画像の作成、編集、変換、表示に使用されるオープンソースのソフトウ

元記事を表示

AWSのS3で本番環境でも画像を保存できるようにしよう。【vol3】

### 【概要】

AWSのS3についてのアウトプット(備忘)、また、これからはじめて触れるよ!って方の参考になればと思います〜。
設定に若干苦戦したのと、他の記事で情報の過不足の部分があったので初めての方でもわかりやすく設定できればと思います!!
(画面は2023年11月時点のものとなります。)

### 【対象】

・S3でクラウド環境に画像を保存したい。
・renderでdeployをしたい。(Herokuなどでも可ですが、環境ヘ変数の設定が少し異なります。)
・.envファイルで管理したい。(credentialファイルでも設定可ですが、今回は.envで管理します。)

### 【環境】

・Rails7系
・Ruby3.2.2
・CarrierWave導入済。(carrierwaveについては省略します。)
・Docker ver3
・render

### 【前提条件】

・[・AWSのS3で本番環境でも画像を保存できるようにしよう。【vol1】 ](https://qiita.com/iijima-naoya-45b/items/0bdf75bd

元記事を表示

【Rails】routesが難しい…苦戦したのでまとめてみた

# はじめに
こんにちは、エンジニア2年目の嶋田です。
まずは、この記事を開いていただきありがとうございます!

Railsのルーティング(routes)は、WebアプリケーションのURLとコントローラーアクションのマッピングを定義する重要な要素です。
しかし、私自身かなり理解に苦戦しました…
少し勉強したので、この記事では、Railsのルーティングについて初心者向けに説明してみようと思います。
少し長いですが、ぜひ最後までお付き合いください。

# 概要
この記事は、Railsのルーティングに焦点を当てており、以下の内容が含まれています。

– Railsのルーティングとは何かについての説明。
– ルーティングの基本的な概念、config/routes.rbファイルの基本、デフォルトのルーティング設定、ルーティングの設定方法についての解説。
R- ESTfulルーティングについての説明と基本的な原則。
– 名前付きルートの利点と基本的な設定方法。
– ルートヘルパーの説明と主要なルートヘルパーの紹介。
– エラーページのカスタムルーティングについての説明と設定例。
– ルート情報の確

元記事を表示

Railsで画像アップロードするときのS3バケットの設定

## はじめに
Railsで画像アップロードするときのS3バケットの設定方法を紹介します。
必要最低限の権限だけ付与するようにしようと思います。

RailsからAWSへアクセスするためにはアプリケーション用のIAMユーザーを作成して、アクセスキーとシークレットアクセスキーを使います。

作成したIAMユーザーにS3へのアクセス権をつけることでRailsからS3へアクセスできます。

## 環境
`Rails 6.1.6`
`ruby 3.0.6`

## S3バケットの設定
バケットのアクセス許可の設定はブロックパブリックアクセス、バケットポリシー、オブジェクト所有者で行います。

### ブロックパブリックアクセス
チェックボックスが4つ並んでいるUIのところです。
今回のユースケースでは`新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする`と`任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックす

元記事を表示

質問が分岐する診断機能

## はじめに
この記事では質問が分岐する診断機能の実装をします。
以下イメージ画像のように、回答次第で次の質問内容が変わるように実装していこうと思います。
![joukenbun_22599-600×600.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581319/ff6b3c08-a713-f7d4-abdc-b2d2022dd7f2.jpeg)

この機能を使って作成したサイト

https://huter.onrender.com

## 1.コントローラー設計
コントローラーを分岐させたい質問の数ー1個作ります(一つ目の質問の分岐だけnew.htmlとshow.htmlに書けるため)
今回は質問の分岐の数が4つだった場合を想定して実装していきます。
“`ruby:cmd
$ rails g controller topics
$ rails g controller topic2s
$ rails g controller topic3s
“`
“`ruby:topics_con

元記事を表示

【Ruby on Rails】自分だけしか投稿できなくする方法

## はじめに
この記事では自分以外に投稿をさせないための簡単な条件文を紹介します。
前提として、投稿機能、ログイン機能ができてからの条件になっています。
## viewページ
“`ruby:index.html.erb
<% if current_user.id == 1 %>
<%= link_to "新規投稿ページへ", コントローラー名_new_path %>
<% end %>
“`
## 解説
この条件式 `<% if current_user.id == 1 %>` はcurrent_user.id が1である場合の時に “新規投稿へ” というリンクを表示することができます。
“`ruby:index.html.erb
<% if current_user.id == 1 %>
user.id が1の時のみに表示される部分
<% end %>
“`
1番最初に登録した自分以外には新規投稿ページのリンクを表示させないように制限することで、自分以外投稿できないようにする方法になってます。

元記事を表示

RailsでCSVファイルをエクスポートしてみた(文字化けも対処)

どうもこんにちは。

最近、RailsでCSVファイルをエクスポートする方法を学んだのでメモします。

# 実装手順

## 1. クラス定義

導入方法は至って簡単です。使用したい機能のコントローラファイルの一番上に、以下のようにライブラリを定義します。

“`ruby
require ‘csv’

class SampleController < ApplicationController ... ``` これだけで`CSV`クラスのメソッドをコントローラ内で使用することができるようになります。 ## 2. exportアクションを定義 まず、使用したいコントローラに`export`メソッドを定義します。 ```ruby class SampleController < ApplicationController def export end end ``` ## 3. ルーティングを定義 ```ruby resources :samples do collection do get 'export' end end `

元記事を表示

バリデーションエラー時のrenderメソッドとredirectメソッドの違い

## バリデーションエラー時のrenderメソッドとredirectメソッドの違い

Ruby on Railsのコントローラーで、バリデーションエラーが発生した場合、`render`メソッドと`redirect`メソッドの違いは重要です。この記事では、これらのメソッドの違いと、それぞれの利用ケースについて説明します。

### `render`メソッドの利点

#### 1. バリデーションエラーの詳細を表示

`render`メソッドを使用すると、バリデーションエラーが発生したときに、詳細なエラーメッセージをビューに表示できます。これはユーザーにエラーの具体的な内容を伝え、修正の手助けをします。

#### 2. フォームの再表示

`render`メソッドを使用すると、フォームの入力内容を保持したまま、エラーメッセージとともに再度同じページを表示できます。ユーザーはエラーを修正しやすく、データの再入力が不要です。

#### 3. コントローラーアクションが再実行されない

`render`メソッドを使用すると、コントローラーアクションが再実行されず、バリデーションエラーが発生し

元記事を表示

Ruby on Railsで診断機能の実装

## はじめに
この記事ではラジオボタンを使った診断機能を実装していきます。
設計、質問内容などは以下の記事を参考にして作成しました。

https://qiita.com/nakamura9atsuya20/items/f6a967c2854f769fc6d4

## 1.コントローラー設計
“`ruby:cmd
rails g controller perfumes
“`
“`perfumes_controller.rb
class PerfumesController < ApplicationController def index end def new @perfume = Perfume.new end def show @perfume = Perfume.find_by(id: params[:id]) end def create perfume = Perfume.new(perfume_params) if perfume.s

元記事を表示

RENDERからAWS S3への移行に伴うエラーについて2

## Mysql(MariaDB)で設定したdatabase接続用のパスワードと、EC2ターミナル上で設定したパスワードが異なっているとエラーが出る

mariaDBで設定したパスワードと一致していないといけないので、もし片方が違うかったら修正する。

では確認するためには、どうすればいいのか。
それは、
EC2ターミナル上で設定したパスワードの設定を確認するには以下のコマンドを実行する。

“`bash
[ec2-user@ip-172-31-23-189 ~]$ sudo vim /etc/environment

“`

そうすると設定が確認できるので、確認し修正する。

元記事を表示

Railsのcreateアクションにおけるsubmitボタンのデフォルト名

# Railsの`create`アクションにおける`submit`ボタンのデフォルト名

Railsにおいて、フォームを使ってデータの新規作成を行う際、通常は`create`アクションが利用されます。このアクションでは、新しいデータベースレコードを作成するため、ユーザーにデータの入力を促すフォームが表示されます。その際、`submit`ボタンは非常に重要な要素で、ユーザーがデータを送信するためのトリガーとなります。

Railsにおいて、`submit`ボタンのデフォルトの名称は「Create + モデル名」の形式で決定されます。これはRailsのコーディング慣習に基づいた自動的な命名ルールです。例えば、`Post`モデルを新規作成するフォームにおいて、`submit`ボタンのデフォルト名は「Create Post」になります。同様に、他のモデルに対しても「Create モデル名」といった形式でボタン名が生成されます。

このデフォルトのボタン名の決定にはいくつかの利点があります:

1. **一貫性**: Railsの慣習に従った命名を使用することで、開発者間のコードの一貫性が保たれ

元記事を表示

マイグレーションファイルのnull: false と モデルファイルの presence: true の違い、および スキーマ定義とバリデーション定義の比較

# マイグレーションファイルの`null: false` と モデルファイルの `presence: true` の違い、および スキーマ定義とバリデーション定義の比較

データベース設計とアプリケーションのデータ整合性の確保において、`null: false` と `presence: true` の違いは重要です。さらに、これらの概念をスキーマ定義とバリデーション定義と比較して理解しましょう。

## 1. `null: false` と `presence: true` の違い

### `null: false` (マイグレーションファイル)

– **関連性**: データベース設計に関連。
– **目的**: データベーステーブルの特定のカラムが「null」(空値)を許容しないことを指定。
– **例**: `t.string :name, null: false` は、`name` カラムが必ず値を持つことを保証。

### `presence: true` (モデルファイル – バリデーション)

– **関連性**: アプリケーションのモデルに関連。
– **目的**:

元記事を表示

Railsでログアウトボタンを作成する際のHTTPメソッド変更

## Railsでログアウトボタンを作成する際のHTTPメソッド変更

Railsでログアウトボタンを実装する場合、通常は`link_to`ヘルパーメソッドを使用します。ログアウトの操作はセッションを削除するアクションとして、HTTPメソッドとしては`DELETE`が適しています。しかし、`link_to`ヘルパーメソッドはデフォルトでHTTPメソッドが`GET`に設定されています。そのため、HTTPメソッドを`DELETE`に変更する必要があります。これはTurboフレームワークを使用する場合に特に重要です。

### 1. ログアウトボタンの作成

まず、ログアウトボタンを作成します。通常、`link_to`ヘルパーメソッドを使用して次のように記述します。

“`erb
<%= link_to 'ログアウト', logout_path %>
“`

### 2. HTTPメソッドの変更

`link_to`ヘルパーメソッドを使用する場合、HTTPメソッドを変更する必要があります。これはTurboフレームワークの仕様に合わせたものです。ログアウトアクションを`DELETE`メソッ

元記事を表示

RailsのFormオブジェクトを触ったので、備忘録として残していきたい

# はじめに
インターン先のrails開発でFormオブジェクトなるものに触れる機会があったので、備忘録として残す

# Formオブジェクトとは
controllerやviewに入り混じるメソッド群を単一のクラスにカプセル化することが可能で、Formからのリクエストデータに対して採用されるRailsのデザインパターン、リファクタリング技法のひとつです。

最初に軽く、今回の実装におけるFormオブジェクトの定義について説明します。
Formオブジェクトはmodel層として定義され、controller層からリスエストパラメータを取得し、そのデータを加工、検証、保存するための責務を有します。

# ユースケース
一般的にFormオブジェクトのユースケースは以下の通りです。

### ユーザー認証
例えば、password確認用(password_confimation)の入力フォームはmodelと直接関係のない属性です。こういった属性に対するロジックをmodelに書き続けた結果出来上がるのが、**ファットモデル**だと思っています。

controller側
フォームからの入力値をs

元記事を表示

OTHERカテゴリの最新記事