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

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

任意のパスパラメータ名を指定しつつネストしたルーティングをしたい[routes.rb]

# 以下のような3つのAPIを作りたいとき

“`
POST /api/v1/registration_requests
GET /api/v1/registration_requests/:token
POST /api/v1/registration_requests/:token/accounts
“`

## `param` で指定する
“`routes.rb
namespace :api, format: :json do
namespace :v1 do
resources :registration_requests, only: %i[create show], param: :token do
resources :accounts, module: :registration_requests, only: %i[create]
end
end
end
“`

“`
api_v1_registration_requests POST /api/v1/registration_requests(.:for

元記事を表示

Rails 7.0.7.2, 6.1.7.6 のアップデートの内容を検証してみる

## Rails 7.0.7.1, 7.0.7.2, 6.1.7.5, 6.1.7.6 のアップデートがあった

https://rubyonrails.org/2023/8/22/Rails-Versions-7-0-7-1-6-1-7-5-have-been-released
https://rubyonrails.org/2023/8/22/Rails-Versions-7-0-7-2-6-1-7-6-have-been-released

Railsのアップデート(7.0.7.1, 7.0.7.2, 6.1.7.5, 6.1.7.6)が配信された。脆弱性 CVE-2023-38037 のパッチであるという。

https://discuss.rubyonrails.org/t/cve-2023-38037-possible-file-disclosure-of-locally-encrypted-files/83544

>Impact
ActiveSupport::EncryptedFile writes contents that will be encrypted to

元記事を表示

マルチテナントって?

# マルチテナントとは
一つのアプリケーションインスタンスを複数のユーザーや組織(テナント)が共有することを指します。各テナントは独自のデータセットを持ち、他のテナントのデータにアクセスすることはできません。

## マルチテナントの実装方法

### モデルベース
– **特徴:** 同じデータベースを使用し、テナントごとにデータを区別するための外部キー(例: company_id)を持つ。

– **実装例:**
テナントモデル(例: Company)の作成。
各テナントごとのデータを区別するための外部キーの追加。
現在のテナントの設定(例: サブドメインを使用)。

– **サブドメインベース**
特徴: 各テナントが独自のサブドメインを持つ。
– 実装例:
DNSでワイルドカードサブドメインの設定。
Railsのルーティングでサブドメインを制約として使用。
サブドメインのバリデーションの追加。

## サブドメインベースのマルチテナント
ここではサブドメインベースのマルチテナント実装手順例を書きます。

### 1. DNSの設定
ワイルドカードサブドメイ

元記事を表示

Rails 6から7への移行で躓いたところ

Ruby on Railsのバージョンを6から7に更新するにあたって躓いたところの覚書です。

もちろん「ほとんど手を加えずに動いた」なんて主張するつもりはありません。ですが、とにかく動作させてみれば、基本的にはRails(というかRuby)の親切設計で、エラーになった時に「ここは〇〇しないといけないよ」みたいなメッセージが出てきますので、それに従ってエラーに対処することでだいたい何とかなります。

ただし、一ヶ所落とし穴(それも結構深い、、、)にはまりました。

# 落とし穴
上に書いたようにRailsが表示するメッセージに従ってエラーに対処していくことで、ある程度Rails 7で表示できるようにはなりました。ですが、ページネーションをしているページを表示しようとすると以下のようなエラーになってしまいます。

> ArgumentError in xxxxxx
>(中略)
> wrong number of arguments (given 4, expected 3)

で、その下には”<%= will_paginate %>“の行に赤く色が付いています。

## ページネーション

元記事を表示

【Rails】マイグレーション入門~テーブルの作成とデータ型設定~

前回に引き続き、今回もRailsのマイグレーションについて紹介したいと思います。

#### 前回の記事

https://qiita.com/nakaizumi_slj/items/2f0c05d0465d95c5440b

この記事ではマイグレーション内でどのようにテーブルやカラムを作成、修正するかについて解説していきます。
# 目次
[テーブルの作成とカラムの追加](#テーブルの作成とカラムの追加)
[カラムのデータ型と制約](#カラムのデータ型と制約)
[マイグレーションの変更を追加する](#マイグレーションの変更を追加する)

# テーブルの作成とカラムの追加
マイグレーションファイル内では、`create_table`メソッドを使用してテーブルを作成し、そのテーブルにカラムを追加することができます。
以下は例えば”user”というテーブルを作成し、その中に”name”と”email”というカラムを追加することができます。
“`ruby
class CreateUsers < ActiveRecord::Migration[7.0] def change

元記事を表示

model作成時にrails db:migrateを実行しようとしたらundefined method `stiring’とエラーが出たのでその解決に至るまでをアウトプットする

## やりたかったこと
アプリケーションを作成するにあたり、userの情報を格納するためのusersテーブルが必要になったので以下のようにコマンドを打ち込んでmodelとマイグレーションファイルとRSpec用のモデルスペックファイルとFactory Bot用のファクトリファイル作成しようとした。
“`
rails g model User name:stiring email:string password_digest:string
“`
その後、DBに反映させるために`rails db:migrate`を実行したら以下のようなエラーが出た
“`
StandardError: An error has occurred, this and all later migrations canceled:
undefined method `stiring’ エラー文が続く…
“`

## 解決までの道のり
#### 1.エラー文の解読
上記のエラー文をよく見てみると、自分のタイピングミスでstiringなんてメソッド(今回の場合は、データ型)は存在しないよとおこられた。

#

元記事を表示

【個人開発】未経験から独学でキャットフード検索サービスを作ってみた 【Ruby on Rails × Next.js】

# はじめに
はじめまして。
未経験から独学でwebエンジニアを目指しているくまと申します。

この度、全ての猫を飼われているおうちの方に使って欲しい **キャットフード検索サービス「ねこまんま」** を作成しました。

https://www.nekomanmafood.com/

GitHubでリポジトリも公開しています。

https://github.com/kuma0319/catfood-app

サービス概要や使用技術等を紹介させていただきます。

# サービス概要
#### サービス作成の背景
現在私は3匹の猫を飼っています。
猫には毎日ドライキャットフードをあげているのですが、そのキャットフードについて悩むことがとにかく多いです。
というのも、キャットフードはとにかく種類が多い上に、何を基準に選べばいいのかが分かりにくいものです。
だからといって、ネットで情報を集めようと思っても、大体どこのサイトでも似たようなフードばかりが紹介されています。どうやらブランディング力のあるフードばかり紹介されているようです。

元記事を表示

(rails)ActiveRecordとは

・ActiveRecordとはRuby on Railsフレームワークに組み込まれているオブジェクトリレーショナルマッピング(ORM)ライブラリです。ActiveRecordは、データベースとのやり取りを簡単にするための機能を提供します。
またActiveRecordはRuby on Railsの中核となる機能であり、開発者がデータベースを効果的に操作するための強力なツールです。データベースアクセスの抽象化や便利な機能の提供により、効率的な開発とメンテナンスが可能になります。

・ActiveRecordは、データベーステーブルと対応するモデルクラスを定義することでデータの永続化を行います。モデルクラスは、データベーステーブルのレコードをオブジェクトとして扱い、データの操作やビジネスロジックを表現するために使用されます。

・ActiveRecordでは、データベーステーブルとの関連付けやデータのクエリ、データの作成・更新・削除などの一般的なデータベース操作を簡単に行うことができます。また、ActiveRecordはテーブルのカラムとモデルの属性(アトリビュート)の対応付けを自動的に行

元記事を表示

【解決方法】ndefined method ‘profile’ for #Profile id: nil, user_id: 1, name: “〜 とは?

Ruby on rails を学習中の方の参考にしてもらえたら嬉しいです。
アプリケーションを作成している時に出てくるエラーとその解決方法について掲載します。少しでも参考にしていただけると幸いです。
今回は**undefined method ‘profile’ for #Profile id: nil, user_id: 1, name: “〜** というエラーの解決方法をお話しします。
プロフィールページを作って、入力したのに、ページが保存されていないし、表示がされない。そんな時にはこの記事が参考になるかと思います。

それではいきましょう。

## 1、今回のエラー画面はこれです
![スクリーンショット 2023-08-19 7.12.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/5e5f3279-9ed2-edca-45c0-b0a823946118.png)

## 2、今回の現象はこれです。
プロフィール作成画面で文字を入力します。
![スクリーンショット 2023-

元記事を表示

【Rails7】マイグレーション作成からビュー表示までの手順

# 概要
マイグレーションを作成し、ビューを表示するまでのチートシートです。
ハッカソンでフロントエンドとバックエンドのメンバーを分けた際に、早くビューを編集可能にしたかったので作成しました。
とにかくビューの編集に早く着手したいという人向け。

マイグレーションは後から編集するのにファイルを追加する必要があり、最初に詳細に設定することが重要であると考えているため、情報量多めです。

**環境**
M1 Mac
Docker version 24.0.5, build ced0996
Docker Compose version v2.20.2-desktop.1
ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [aarch64-linux]
Rails 7.0.7

## マイグレーション作成
モデル作成コマンドを実行すると、同時に行われるのでスキップ

## モデル作成
“`
rails generate model 名前 [カラム名:型..] [オプション]
“`
コマンド例
“`
rails g model article

元記事を表示

Ruby on Rails:Herokuへのデプロイ方法

# はじめに
Ruby on RailsをHerokuへデプロイする方法の記事が少なかったので、まとめました。
手順さえわかれば、簡単にデプロイできるので、非常に便利です。
特に初心者は、AWSやGCPなどのクラウドサービスを使わずに、Herokuで開発することをお勧めします。
※Gitの利用が前提・必須となります。

# ログイン
はじめに、TerminalからRuby on RailsのGitリポジトリ配下に移動して、heroku loginを実行します。
“`bash
heroku login
“`

# スタックを作成
Herokuのスタックというものを作成する必要があります。今回はheroku-22を選択しました。
“`bash
heroku create –stack heroku-22
“`

スタックを作成すると、添付画像の通り、Herokuのアプリケーションが作成されます。
![スクリーンショット 2023-08-20 10.24.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

Railsの`find`と`find_by`メソッドの違い

# Railsの`find`と`find_by`メソッドの違い

## `find`メソッド

`find`メソッドは、主に主キー(`id`)を基にレコードを検索するためのメソッドです。

### 使用方法:

“`ruby
user = User.find(1)
“`

上記のコードは、`id`が1の`User`モデルのレコードを検索します。もし該当のレコードが存在しない場合、`ActiveRecord::RecordNotFound`例外が発生します。

## `find_by`メソッド

一方、`find_by`メソッドは、任意の属性(`カラム名`)を基にレコードを検索するためのメソッドです。引数としてハッシュを受け取り、そのハッシュのキーと値に合致するレコードを検索します。

### 使用方法:

“`ruby
user = User.find_by(email: “example@example.com”)
“`

上記のコードは、`email`が`example@example.com`の`User`モデルのレコードを検索します。`find_by`は該当のレコードが

元記事を表示

RUNTEQに入って100日で1000時間学習してみた【学習記録のまとめ】

## はじめに
はじめまして!
RUNTEQに入学してから【100日で1000時間学習する】という目標を達成したので、改めて学習した内容をまとめていきたいと思います。

## 学習分野

1000時間の中で以下のような分野を学習しました。
– Ruby
– Ruby on Rails
– JavaScript
– GitHub
– SQL
– DB設計
– Linux
– Docker

## 内訳
学習分野のそれぞれの内訳は以下のようになります。Ruby、Ruby on Railsで700時間ほど学習に充てました。理由については後述します。
![スクリーンショット 2023-08-19 17.25.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517817/3ec259f4-133a-3aac-e7b9-2b317738b462.png)

## 主な学習教材
– スクールのカリキュラム
– ゼロからわかる Ruby 超入門
– プロを目指す人のためのRuby入門
– 独習Ruby

元記事を表示

# Address already in use – bind(2) for “127.0.0.1” port 3000 (Errno::EADDRINUSE)の解消法

`rails s`コマンドを実行したところ、ローカルサーバーが起動できなくなった

## error内容
“`
$ rails s
=> Booting Puma
=> Rails 7.0.6 application starting in development
=> Run `bin/rails server –help` for more startup options
Puma starting in single mode…
* Puma version: 5.6.6 (ruby 3.1.2-p20) (“Birdie’s Version”)
* Min threads: 5
* Max threads: 5
* Environment: development
* PID: 21844
Exiting
/Users/username/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/puma-5.6.6/lib/puma/binder.rb:341:in `initialize’: Address

元記事を表示

【備忘録】kaminariを使ってページネーションを実装する

# はじめに
Railsのgemである**kaminari**を用いて、ページネーションを機能を実装した際の手順を、
備忘録としてまとめたいと思います。

# 実装手順
## 手順概要
1. `kaminari`をGemに追加する
1. 設定ファイルを生成&設定を変更する
1. テーマを生成する(任意)
1. コントローラーのデータ取得の処理を修正する
1. 表記を日本語化する

## 手順詳細
### 1. `kaminari`をGemに追加する
以下の通り、Gemfileにkaminariを追加します。

“`gemfile:Gemfile
gem ‘kaminari’
“`
以下のコマンドを実行して、インストールします。
“`zsh:terminal
bundle install
“`

Docker上で開発している場合は、以下のコマンドを実行します。
“`zsh:terminal
docker-compose build
“`
`docker-compose build`を実行してもインストールされない場合は、以下のコマンドを実行します。
(webの部分はdocke

元記事を表示

現場で使える Ruby on Rails 5速習実践ガイド を読んで学んだこと

Rails速習で学んだことをおおまかに書き留めました。

https://amzn.asia/d/17kehBx

# 前提
RubyやRailsでは万物がオブジェクトとして認識する とクラスとインスタンスオブジェクトが紹介されているので抜粋・加筆する
## RubyやRailsでは万物がオブジェクトとして認識する

オブジェクトという概念は簡単にいうと「モノ」のようなものである。私の現実世界でもモノは溢れている。食材・家・人間・動物という物体から、時間・愛・感情のような抽象的な概念もモノとして捉えることができる。
Ruby/Railsでも同じようにオブジェクトが溢れている。Ruby/Railsを書くというのはありふれたオブジェクトを取捨選択し、レゴブロックさながら新たな形を生み出すようなものである。

## クラスとインスタンスオブジェクト

Rubyのようなオブジェクト指向言語では一般的に、「オブジェクトXのクラスがYであるとき、XはYのインスタンスオブジェクトである」と捉える。例えば`text`はStringクラスのインスタンスオブジェクトであり、`1`はIntegerクラスのイ

元記事を表示

「1-2」Rubyでとりあえずアプリを作って起動してみる

### 1. まずRuby用にフォルダーを作ります
私は以下のように言語ごとにMy***とフォルダーを作っています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529896/401236b2-c436-888e-0748-6598988bc1e2.png)
* 次に、アプリケーションごとにフォルダーを作っていきます、今回は`~\MyRuby\1`の中にアプリケーションを作ります
#
### 2. アプリケーション作成
次に、ターミナルで「rails new アプリケーション名」でアプリを作ります
![スクリーンショット 2023-08-18 102108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529896/b3597c71-cd16-0e8b-33e4-04b360d0af59.png)
* するとディレクトリが以下の様に作成されます。
![スクリーンショット 2023-08-18 1023

元記事を表示

(Docker x Rails7 x MySQL8)のミニマム構成のリポジトリを作成しました。

![スクリーンショット 2023-08-18 10.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26033/fd12ca71-990b-c475-9fbc-14ee236d6345.png)

`docker-rails-quickly`

# リポジトリ

http://github.com/fooramu/docker-rails-quickly#docker-rails-quickly

## 概要

Railsを触るエンジニア用、また自分用の開発環境として「シンプル構成」なComposeファイルで仕上げたリポジトリを作成しました。

## コンテナ

Name | Description | ※
— | — | —
db | MySQL 8 | Health check available (linked to `web`)
web | ruby 3.2.2, Rails 7.0.7 | `rails new –force –no-deps –database=m

元記事を表示

M1 MacでRails + Docker + RSpec + CapybaraでのSystemテストの環境構築

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

RSpecでsystemテストをする際にDockerでSeleniumを導入して、テストを実行する方法になります。

# Docker関連の設定
“`docker-compose.yml
version: ‘3.7’
services:
db:
image: mysql:8.0
platform: linux/x86_64
command: –default-authentication-plugin=mysql_native_password
ports:
– “4306:3306”
volumes:
– db:/var/lib/mysql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: “yes”
sec

元記事を表示

EC2のIAMロールを使ってRailsからSESを使う方法

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

# 前提
インフラをAWSで構成しており、AWS EC2上で稼働しているRailsアプリケーションから、AWS SESを使ってメールを送信する構成を作りました。
その際に、EC2からSESを利用する設定方法があまり記事になっていなかったので記事にしました。

# Railsプロジェクトでの設定
## gemの導入
Gemfileに`gem ‘aws-sdk-rails’`を追記して、`bundle install`します。
ここで注意、`gem ‘aws-ses’`ではないということです。他の記事などで`gem ‘aws-ses’`を利用する人もいましたが、この記事では利用しません。

`aws-sdk-rails`について詳しく知りたい方は[こちらのリポジトリ](https://github.com/aws/aws-sdk-rails)を

元記事を表示

OTHERカテゴリの最新記事