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

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

deviceを使わないでログイン認証機能を作ってみる

※この記事はRails初学者向けです

:::note info
deviceってなに?
railsのgemの一つで、ログイン認証機能が簡単に実装できる。
[https://github.com/heartcombo/devise](https://github.com/heartcombo/devise)
:::

gemは便利だけど、勉強のためにログイン認証周りの仕組みに興味があったので実装してみました。view周りの実装は今回の趣旨とは異なるため触れてません。
## モデル・コントローラの準備

### 1. Userモデルを作成して、schemaファイルを修正

“`rb
$ rails g model user name:string email:string encrypted_password:string
invoke active_record
create db/migrate/[timestamp]_create_users.rb
create app/models/user.rb
invoke

元記事を表示

【Rails】ページネーション「kaminari」と「bootstrap」を使用してカスタマイズ!

# はじめに
kaminariというGemには、BootstrapなどのCSSフレームワークのテンプレートファイルが用意されています。
CSSフレームワークのクラスを手動で付与しなくても、専用コマンドを実行するだけで簡単にテンプレートファイルを実装できます。

※Rails6を使用しています。
※bootstrap導入済み

# 完成イメージ
![pagenation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730527/8de427a8-6638-ca5a-d627-2ea5a4789e5f.png)

## Getting Started
#### ①Kaminariをインストールする
ページネーション機能の実装には、gemの「kaminari」を使う。
“`:Gemfile
:
:

gem ‘kaminari’,’~> 1.2.1′

“`
#### ②bundle installする
“`:terminal
$ bundle install
“`
#### ③kaminari

元記事を表示

DockerのRailsアプリからRedisサーバに接続したい

## はじめに
docker環境で起動しているrailsアプリからホストで起動しているredisサーバに接続したい。
なお、前提として、dockerでのrailsアプリの環境構築が完了しているものとする。

## 環境
– ローカル環境
– macOS
– docker環境
– ruby 3.1.2
– Rails 7.0.3.1

## 手順
### 1. ローカルホストでredisを起動する
まずredisをインストールするために、下記のコマンドを実行
“`
brew install redis
“`
インストールされているか確認する
redisがあればOK
“`
$ brew list | grep redis
redis
“`
redisサーバをバックグラウンドで起動
“`
brew services start redis
“`
redisのクライアントコマンドで以下のように、接続確認を行い、”PONG”が返ってくることを確認
“`
$ redis-cli ping
PONG
“`
### 2. rails側にredisを導入する
Gemfileに

元記事を表示

【超簡単】rails投稿機能で削除しても履歴残す!!(論理削除)

# やること
rails の投稿機能で削除してもレコードを完全に削除するのではなく、ユーザーから非表示になるのみで投稿者や管理者から復元できるようにする!
![画面収録-2022-08-25-18.19.24.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/cd75eb93-9646-722a-5b2d-50028b94f021.gif)

# 手順
1. gemのインストール
1. カラムの追加
1. 一覧ページの表示
1. 削除、復元
こんな感じでやっていきます!今回はgemの機能が強すぎるので gemの使い方がメインになります:massage:
早速やっていきましょー!!

# 1.Gemのインストール
“`gemfile:Gemfile
gem ‘discard’, ‘~> 1.2’
“`
“`terminal:terminal
bundle install
“`

# 2.カラムの追加
論理削除をしたいテーブルに`discarded_at`カラムを追加します!
“`te

元記事を表示

React + Rails + AWS Fargate の構成を実現したい – 07 バックエンドのCI導入(GitHub Actions)

# 目次

– [概要](#概要)
– [本記事のゴール](#本記事のゴール)
– [成果](#成果)
– [つまづいた点](#つまづいた点)
– [1. yarnコマンドが見つからなくてエラー](#1-yarnコマンドが見つからなくてエラー)
– [エラー内容](#エラー内容)
– [解決策](#解決策)
– [2. rakeコマンドで失敗する](#2-rakeコマンドで失敗する)
– [エラー内容](#エラー内容)
– [解決策](#解決策)

# 概要

https://qiita.com/memomaruRey/items/746f9cff0ceefe8b6157

# 本記事のゴール
以下を参考に、GitHub Actionsを用いたバックエンドのCI導入を行う。

https://codelabo.com/posts/20201128164634

# 成果

以下のように、ブランチにプッシュ後に、以下記事で書いたテストが実行されていることを確認した。

https://qiita.com/memomaruRey/items/8a11

元記事を表示

React + Rails + AWS Fargate の構成を実現したい – 05 バックエンドのテスト整備編(RSpec)

# 目次

– [概要](#概要)
– [本記事のゴール](#本記事のゴール)
– [成果](#成果)
– [テストに成功する場合](#テストに成功する場合)
– [テストに失敗する場合](#テストに失敗する場合)
– [つまづいた点](#つまづいた点)

# 概要

https://qiita.com/memomaruRey/items/746f9cff0ceefe8b6157

# 本記事のゴール
以下を参考にバックエンドのテスト整備を行う。

https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2/viewer/f8fbf49145c733a81dfc

# 成果

以下コマンドにより、テストを実行できるようになった。

## テストに成功する場合
“`bash
bundle exec rspec
..

Finished in 0.03596 seconds (files took 2.09 seconds to load)
2 examples, 0 failures
“`

## テストに失敗する場合
`

元記事を表示

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で

元記事を表示

OTHERカテゴリの最新記事