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

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

Railsでアプリ作成時のMySQLエラーの解消方法

# 動作環境
M1 macboook pro
macOS Monterey ver.12.5

# 1. opensslの再設定

`rails new (アプリ名) -d mysql`を実行すると、以下のエラーが発生。
“`
An error occurred while installing mysql2 (0.5.4), and Bundler cannot continue.
“`

macOSのSierra以降は、opensslがデフォルトが変わっているようで、以下のように再度インストール。
“`
% brew install openssl
% bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl/lib”
“`

そして、改めて`bundle install`を実行。
“`
% bundle install
“`

# 2. railsサーバが起動しない

opensslの設定後、今度は、`rails s`でサーバが起動せず、以下のエラーが発生。
“`
=> R

元記事を表示

React + Rails + AWS Fargate の構成を実現したい – 03 フロントエンドとバックエンドの連携

# 目次

– [概要](#概要)
– [本記事のゴール](#本記事のゴール)
– [成果](#成果)
– [バックエンドの動作確認](#バックエンドの動作確認)
– [フロントエンドとバックエンドのつなぎこみ](#フロントエンドとバックエンドのつなぎこみ)
– [作業メモ](#作業メモ)
– [フロントエンド](#フロントエンド)
– [1. バックエンドのAPIからのレスポンスの扱い](#1-バックエンドのapiからのレスポンスの扱い)
– [2. Warning: Each child in a list should have a unique “key” prop.への対処方法](#2-warning-each-child-in-a-list-should-have-a-unique-key-propへの対処方法)
– [バックエンド](#バックエンド)
– [1. Railsのmigrationファイル場所](#1-railsのmigrationファイル場所)
– [2. バリデーションの設定ファイル場所](#2-バリデーショ

元記事を表示

Docker 環境でrails db:migrateが出来ない件について

こんにちは。たにやんです。記事を見ていただきありがとうございます。
初歩的なエラーですがつい先日にも同じエラーでつまづき何回も同じエラーでつまづいては効率が悪いと思い、
記事を書くことにしました。

# やりたいこと
プロフィール編集のページを作ろうと思い、usersテーブルに新しくカラムを追加したい。
そこで以下を実行

“`rails db:migrate“`

# 結果

“`
rails aborted!ActiveRecord::DatabaseConnectionError: There is an issue connecting with your hostname: db.

Please check your database configuration and ensure there is a valid connection to your database.

Caused by:
Mysql2::Error::ConnectionError: Unknown MySQL server host ‘db’ (8)
“`

毎度おなじみの

元記事を表示

StimulusJSでCropper.jsを使ってみた

タイトルの通り、StimulusJSでCropper.jsを使ってみました。
最近の自分は、StimulusJSのキャッチアップしています。なので、布教がてらに実装例を紹介しようと思います。

よくあるユースケースだとクロップ後の画像をサーバに送信しがちですが、この画面では、画像のクロップ範囲 **のみ** をサーバに送信します。

![スクリーンショット 2022-08-26 19.24.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42642/e8b78c08-3e15-8523-8910-aefca35e0699.png)

よくあるWEBアプリでは、画像をS3などのストレージサービスに保存しますが、自分が作っているWEBアプリではherokuで動いていることもあり、DBに何でも突っ込みたかったので画像をBASE64でエンコードしてDB内に保存しました。また、登録した画像は公開することを考えていないので、パフォーマンスは考慮しなくていい、という理由もあります。

この実装では、「編集時のク

元記事を表示

【Rails基礎】Active Recordとは?

**Active Record**とは**Rails**における**Object/Relational Mapping (ORM)** です。
※訳:オブジェクト関係マッピング

**Object/Relational Mapping (ORM)とは??**

以下Wekipediaより
>オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である

**つまり、RubyでDBを操作するための技法ということですね!!?**

RailsアプリでDBに変更を加えるとき、Rubyのコードで直感的にDBを操作することができるのもActive Record様のおかげ

また、ActiveRecord様のおかげでDBの種類(MySQL, PostgreSQL等)に関わらず同じコードで操作可能になります!

Active Recordはどのように機能している?

では、お馴染みのrails g modelをして、DBにテーブルを追

元記事を表示

EC2 rails 本番環境 puma デプロイ

# Railsアプリケーションに必要なパッケージのインストール

・最新バージョンへのアップデート
“`
sudo yum -y update
“`

“`
sudo yum install git bzip2 readline-devel zlib-devel gcc libyaml-devel libffi-devel gdbm-devel ncurses-devel gcc-c++ mysql-devel ImageMagick ImageMagick-devel
“`

# ruby-build, rbenvのインストール
“`
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
vim ~/.bash_profile
“`

以下の記述を追記

“`
export PATH=$HOME/.rbenv/bin:$PATH
eval

元記事を表示

Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第1章】(1.アプリ作成〜2.CRUD処理まで)

## はじめに
Railsの基礎を一通り学び終わったのですが、自分自身理解が追いついてないところもあると思うので、記事を作成する中でアウトプットし、理解を深めていくことが目的です。

## 概要
今回はタイトルにもあるとおり、簡単なメッセージ投稿アプリを解説も交えながら作成していきます。
アプリの作成からCRUD処理でメッセージ投稿機能の実装、それからリファクタリング、フラッシュやバリデーションの設定、最後にBootstrapでスタイルを付けるという感じで進めていきます。
なので、今回は3章に分けて記事を作成します。

## 開発手順
1. アプリの作成 (第1章)
2. CRUD処理で簡単なメッセージ投稿アプリを実装 (第1章)
3. リファクタリング (第2章)
4. フラッシュの実装 (第2章)
5. バリデーションの設定 (第2章)
6. エラーの処理 (第3章)
7. Bootstrapでスタイルをつける (第3章)

## 開発環境
– Ruby 2.7.3
– Rails 6.1.6.1
– Postgresql

## 1. アプリの作成
“`ターミナル:ターミナ

元記事を表示

Capybaraで要素がないことを確認するテスト

# 概要
Capybaraでテストを書いていて、ある条件で要素がない、表示されないことを確認するテストはどう書くんだろうと調べた結果の個人的なメモです。

“`Ruby
expect(page.all(‘.hoge’, text: ‘AAAAA’).empty?).to eq true
“`

.hogeというクラスを持つ要素でテキストがAAAAAのものを探して、それがemptyであることを確認することでテスト出来た。

また以下のようにも書けた。

“`
expect {
find(‘.hoge’, text: ‘AAAAA’)
}.to raise_error(Capybara::ElementNotFound)
“`

## 参考にしたサイト

以下のサイトを参考にしました。ありがとうございます。

[Capybaraで要素がないことをテストする方法](http://319ring.net/blog/archives/2546/)

[Capybara(Rspec)で指定したセレクタ要素が存在しないことを検証する](http://q

元記事を表示

Fly.ioでRailsアプリをデプロイしてみた for Mac

今回、Herokuが無料で利用できなくなる!?といった話を聞いたので、
新たにFly.ioでデプロイできるか試した記事になります。

# 手順
今回は、この流れで進みます!
1. Fly.ioの準備
1. ビルド&デプロイ
1. サイトを見てみる

# 1. Fly.ioの準備
1. FlyのCLI(コマンドを使えるようにするもの)をインストール
1. アカウント作成

まず、Fly.ioを見てみましょう?

https://fly.io/docs/rails/getting-started/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017749/0a7b751e-ccb4-ffab-ca9b-031992ad9334.png)
最初の方にこんなことが書いてありますね。
訳すと、([DeepL先生](https://www.deepl.com/ja/translator)ありがとう?)
`
Fly を使い始めるには、Fly 上のアプリを管理するための CLI アプリ、flyc

元記事を表示

Turbolinks使用環境では$(document).on(‘turbolinks:load’)にする

Railsで
“`
$(windows).on(‘load’, function(){…})
“`
ではなく
“`
$(document).on(‘turbolinks:load’, function(){…})
“`
とすることで期待通り発火してくれるようになることがありますが、その理由の備忘録です。

### 前提
Ruby: 2.7.2
Rails: 6.1.6
gem: turbolinks 5.2.1

### 理由
turbolinksではページ遷移を高速化してくれますが、仕組みとしてはブラウザでページ遷移が起きた時に
– head内で差異があればマージ
– bodyタグを差し替え

することで、同ページ内であたかも画面遷移が起きているように見せています。
実際にはページ遷移が起きていないため、ページ遷移が発火条件の`$(windows).on(‘load’, function(){…})`は発火しません。

なので、turbolinksを使用する場合のページ遷移は、turbolinksで用意されたロードイベント`turbolinks:load`を使用

元記事を表示

【Rails】マイグレーションで文字列の外部キー定義をより簡単に書く方法

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## 状況
“`rails db:migrate“`したとき、外部キーが文字列なのに“`references“`で外部キーを定義しようとするとエラー

“`
PG::DatatypeMismatch: ERROR: foreign key constraint “fk_rails_640ba59391” cannot be implemented
DETAIL: Key columns “user_id” and “id” are of incompatible types: bigint and character varying
“`

“`db/migrate/2022090909090_create_posts.rb
def change
create_table :posts do |t|
t.references :user, null: false, foreign_key: true
t.string :title, null: fal

元記事を表示

【Rails】Modelに定義した定数をControllerやViewで使用する方法

## はじめに
どうも、もきおです。RailsでModelに定義した定数をControllerやViewで使用する場面が実務でちょくちょく使う事があり、どうやって参照するんだっけ?と思ったので、調べたのをメモとして残しておきたいと思います。

## 結論
定数を参照するには**Model名(Rubyならクラス名)::定数名**で参照する事ができます。
“`ruby:
MAIN_USERS = [“Bob”, “Keny”, “John”, “July”, “Karen”].freeze

User::MAIN_USERS
# => [“Bob”, “Keny”, “John”, “July”, “Karen”]
“`
## 具体例
さて、具体例に入っていきましょう。今回はユーザー登録の際、SNSのURLを入力する欄があるとします。その際、省きたいURLを予め定数として登録しておき、実際入力され渡ってきたURLと定義していた定数が部分一致する場合、バリデーションでアラートを表示するというパターンで記述したいと思います。

まずは良く使うものをmodelに定数定義しましょう。“.fr

元記事を表示

ActiveRecord の update, save は Dirty じゃないとき UPDATE 文を発行しないので別のオブジェクトで同一のレコードを扱うときに注意

[ActiveRecord#update](https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update), [ActiveRecord#save](https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save) はDirtyな値を持たない時、実際のUPDATEを行わない。便利機能だけど、更新対象を複数の変数に受けている場合、ちょっと予想外の挙動をするので注意。

“`ruby
user = User.find(42)
user.name # => ‘Tarou’

current_user = User.find(42)
current_user.name # => ‘Tarou’

current_user.update!(name: nil)
user.update!(name: ‘Tarou’) # => Dirty でないので UPDATE 文が発行されず、 DB の nam

元記事を表示

【入門】DockerでRailsのAPIモードを環境構築しHerokuへ本番反映する手順

## はじめに

今回はDockerを使ってRailsAPIの環境構築および簡単なアプリ開発を行い、ローカルで作成したDockerコンテナをHerokuに置いて本番反映する流れを解説していきます。

Railsの環境構築およびAPIの開発そして本番反映の流れを学びたい人はぜひ参考にしてみてください。

## この記事の対象者

– Dockerを使ってRailsAPIの開発をしたい人
– Dockerで作成したアプリをHerokuを使って本番反映したい人
– ポートフォリオ開発をこれからしたいと思っている人

## この記事でやらないこと

– Railsの細かい文法説明
– Dockerについての詳しい解説
– Herokuについて詳しい解説

上記において必要箇所は解説を都度入れますが、「そもそもdockerとは」といった細かい箇所の解説については参考記事を貼っているのでそちらを参考にしていただければと思います。

## この記事の目標

– Dockerを使ったRailsAPIの開発
– Dockerで作成したコンテナをHerokuに反映し本番公開する

## Dockerで

元記事を表示

【Rails】DBの一意性について【備忘録】

本記事はRailsチュートリアル6.2.5の備忘録です。
URL:https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-uniqueness_validation

内容としては、ユーザ(Userクラス)のメールアドレス(email)を一意なものとして定義し、そのテストをしていくというものです。
アプリ側(モデル)とDB側の両方で、一意性を設定することができますが、結論から言うとどちらも設定する方が良いようです。

それでは詳細に説明していきます。

アプリ側では、以下のように一意性を持たせることができます。
“`ruby:アプリ側
class User < ApplicationRecord … validates :email, presence: true, length: { maximum: 255 }, format: { with: /正規表現/ }, uniqueness: true #####追記####

元記事を表示

【Ruby】メソッドの後の感嘆符”!”について

メソッドの中には、破壊的にデータを変更してしまうものがあり、慣習として名前に”!”が付けられます。

例えば、以下のコードがあったとします。
“`
self.email = self.email.downcase
“`
参考:Railsチュートリアル 第4版 6章より
https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-minimum_password_standards

上記だと右辺で”self.email”を全て小文字にしてから自身に代入することで更新していますが、
.downcase!メソッドを用いることで、直接”self.email”の値を変更することができ、より簡潔に書けます。

“`
self.email.downcase!
“`

破壊的なメソッドは便利そうですが、一方で元の値を強制的に上書きするので、使いどころには注意ですね。

【追記2022/08/26】
@nodai2h_ITC 様よりご指摘を頂きました。
以前、”!”をメソッドに付けると破壊的なメソッドになると勘違いしていまし

元記事を表示

RDS MySQLとAuth0を繋げる

こんにちは。SARAHの沈(シム)です。
最近認証基盤をRailsのdeviseからAuth0への切り替えを行う作業があり、Auth0と既存のDBを繋げる機会がありまして、
自分が学んだ内用を共有しようかと思います。

目的

– RailsのDevise認証からAuth0への認証基盤を移行
– DBのユーザーデータは維持する(Export/Importなし)
– Auth0のOpen ID Connect(以下OIDC)を付けてAPI Gatewayを保護

Auth0へ移行した理由

弊社のFoodDataBankサービスがRuby on Railsで構築されましたが、これから追加する機能を考えた時に拡張性が低く、開発パフォーマンスもあまり出ない状況であるため、フロント側を新たに構築する流れになりました。RailsのAPIを立ち上げるとDeviseとの通信で認証はできますが、メンテナンス、コストなど色々考えたところ、Railsに載せるより、Auth0を用いて進むのがフロント側の認証繋ぎの負担も下がるし、将来的にEC2で立ち上げたRailsもなくなることによってコスト削減

元記事を表示

【Ruby】Railsでリクエストのバリデーションを行うライブラリ`rails_param`

## 概要
Railsでリクエストのバリデーションを行う場合、[Rails基礎 ストロングパラメータとバリデーション](https://hpsuzucat.hatenablog.com/entry/2020/10/24/224143)の記事にある通り、ApplicationRecordの機能を使用する方法などが挙げられます。もちろん、この方法でも全然良いのですが、ApplicationRecordのモデルに通す前に、controllerでバリデーションしたい時もあるなと感じました。
何かないかなと調べてみた結果、`rails_param`というライブラリが良さげだったので、今回少し紹介します。

## 機能など
[nicolasblanco/rails_param](https://github.com/nicolasblanco/rails_param)に、ライブラリのReadmeがあります。パラメータの、型指定や、必須チェック、最小値・最大値など基本的なチェックは出来そうです。また、項目毎にエラーのメッセージもカスタムで設定できます。

## 実装サンプル
以下はAPIで、文字列の

元記事を表示

[Rails6]グループ機能を実装する

### 前提
記事を書いている私は現役のエンジニアではなくエンジニアを目指して学習中の者です。
よって、気をつけてはいますが記述内容には誤った内容が含まれている危険性があります。
その為この記事は参考程度に読んで頂き詳しい内容は公式の記述を参考にすることをおすすめします。

### この記事で実装すること
Rails6系のPFでグループ機能を実装したのでその時の手順と詰まった箇所についてまとめました。
PFは卒業アルバムページを作成できるようになっており、そのアルバムを共有するメンバーをグループで設定しています。
よって以下のような機能を持ちます。
– アルバムに招待するメンバーを選択できる
– アルバムメンバーにだけ該当するアルバムを表示する

### 使用技術
Ruby 3.1.2
Rails 6.1.6

### 実装手順
既に以下のモデルを持つアプリを作成した前提で進めていきます。
**Userモデル**
ユーザーは複数のアルバムを持つことができます。
“`ruby:user.rb
has_many :albums, dependent: :destroy
“`
**Alb

元記事を表示

Ruby on rails JqueryとBootstrapが反映されない

今日は、RailsのTutorialsでJqueryとBootstrapをインストールした後、Dropdownの反映がされなかったので、その対処法についてまとめました。

まずは、こちらのコードを実行しました。
~~~app/javascript/packs/application.js
//= require jquery
//= require bootstrap
~~~

そして、
~~~app/assets/stylesheets/custome.scss
@import “bootstrap”;
~~~
を追加しました。
しかし、これでは動かず、、

~~~app/layouts/application.html.erb