Rails関連のことを調べてみた2021年09月14日

Rails関連のことを調べてみた2021年09月14日

[Rails]モーダルウィンドウを作る

# はじめに
本記事では、過去に作った`モーダルウィンドウ`の作り方を記述します。

## イメージ
このような形です。
かっこいいですよね。

![1a72749226abfeb518fca661092f8b69.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1768158/407aa99b-82e0-0699-7373-95ebbc9ccfc9.gif)

# コード
該当のビュー

“`erb

省略

省略

<%# モーダルウィンドウ %>

初心者がGemについて解釈する!

初めて聞いた時、何のことかさっぱりわからなかったです。。。

そもそもGemとは?初心者なりにわかりやすく噛み砕いていこうと思います!

# Gemとは?

結論は、GemはRubyのライブラリと言うことです!
RubyGemsにはたくさんのライブラリがあり、それぞれをGemと呼ぶ。

# ライブラリとは?

結論は、他のプログラムと組み合わせて使用する為に、複雑なプログラムを1つのセットにしたもの!
プログラミングにおける拡張機能は、ライブラリと呼ばれ、複雑な機能実装でも、ライブラリをアプリへ読み込ませることにより、簡単に実装できるようになる!と言うことですね!

# まとめ

わかりやすく言うと、良いパーツを使って簡単に実装していくって事だと思います!
言語化して説明するの本当に難しいです汗
間違っていたりしたら、遠慮なくご指導してください(; ;)
とりあえず慣れるまで、今後もこんな感じで描いていこうと思います。。

rails かしこさ

—–
##railsのかしこさに感動
—–

“`java:title
$ rails g model Friendly
Running via Spring preloader in process 12491
invoke active_record
create db/migrate/20210913142600_create_friendlies.rb
create app/models/friendly.rb
invoke test_unit
create test/models/friendly_test.rb
create test/fixtures/friendlies.yml
“`

“`java:マイグレーションファイル
class CreateFriendlies < ActiveRecord::Migration[5.2] def change create_table :friendlies do |t|

Railsの標準設定のエラーについて

Rails-tutorial3章学習中に躓いてしまったので今後のために記事にしてみます。

*発生したエラー

・Railsの標準設定のバージョンとgemでのRailsのバージョンがload_defaultエラー
・本来Rails-tutorialでの学習はRails6.0.3で進めていくのだが、
標準設定のバージョンが6.1.3.2になってしまっているため、Railsアプリ側を変更しなければいけなくなってしまっている?

![スクリーンショット 2021-09-12 22.46.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864243/6b5eaac7-caaf-c0f1-ca32-29e71bcdcd91.png)

*やってみたこと

・gem list railsで全ての使用できるRailsバージョンを確認
gem uninstall railties -v 6.1.3.2で6.0.3以外のRailsバージョンを全て削除→Rails -vで確認→6.0.3になっていない…

・rb

Ruby3.x+Rails6+CircleCI+Rspec+Rubocop+MySQL8のプロジェクト作った。(ソースコードあり)

プロジェクトを立てるたびに同じようなプロジェクト作成作業をするのが手間なので、ソースコードを残しておく。
OSSライセンスにしておくので、この環境で使いたい人がいたら、使ってください。

# 環境
Ruby3.x
Rails6
CircleCI
Rspec
Rubocop
MySQL8

# ソースコード

https://github.com/outsource-systems/rails6-sample-app

【Rails】gemのアンインストールは、慎重に。

###1.背景
Rubyを使用して個人開発を行っています。
使用を検討していたgem(ActiveRecord)をインストールしたものの結局使わなかったのでアンインストールしたところ、
別プロジェクトのデータベースが消えてしまい、**「慎重にやっておけば良かった…」**と思いました。

今回はその反省を備忘録としてまとめます。

###2.環境
– mac.os バージョン10.15.6
– Ruby 2.7.3
– Rails 6.1.3.1
– psql (PostgreSQL) 12.6

###3.アンインストールを実行
下記のコマンドを実行し、Gemfileからも削除、`bundle install`を行いました。

“`ruby
project_name % bundle exec gem uninstall ActiveRecord
“`
その結果、無事削除することができました。しかし、別プロジェクト(RubyとRuby on Rails使用)のデータベースが削除されてエラーになりました。
データベースを作成し直した話はこちら(作成中)

####補足:bundl

view内でif文を用いた条件分岐のスマートな書き方[Ruby, Rails]

## はじめに

今回の記事はとても局所的なテーマを扱います

Rubyの構文において、以下のようなif文を用いた冗長的な書き方を、よりスマートにまとめます

`app/views/announcement.html.erb`

“`html:Before

配信元 <% if @announcement.user_id %>
<%= @announcement.user.name %>
<% else %>
管理者
<% end %>

“`

## 結論

三項演算子を用いて、かつ文字列の部分はStringオブジェクトにします

“`html:After

配信元 <%= @announcement.user_id ? @announcement.user.name : "管理者" %>

“`

## 想定状況

announcementインスタンスはuserインスタンスに紐づく、もしくは紐づいていない、状況です

“`ruby:app/models/user.rb
class User

【Rails】bulletを使ってN + 1問題解決

#N + 1問題とは

N+1問題とは、データベースからデータを取り出す際に、大量のSQLが発行されてパフォーマンスが低下してしまう問題のことです。以前にN + 1問題について配信してありますので気になった方はご参照ください。

https://qiita.com/kinoshitaken123/items/fb67f7de37c2ff4f0ba2

#bulletとは

N + 1問題がどこに発生しているかお知らせしてくれるgemです。

https://github.com/flyerhzm/bullet

>公式のドキュメント

#導入方法

以下のコードをGemfileに追記。

“`gem:Gemfile
group :development do
gem ‘bullet’
end
“`

“`
$ bundle install
“`

#デフォルト設定

“`ruby:config/environments/development.rb
Rails.application.configure do
# ここから
config.after_initial

Rails6で、An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.が出た時、の対処

Rails6で、下記が出た時の対処

“`
An error occurred while installing mysql2 (0.5.3), and Bundler cannot
continue.
“`

下記を実行する。

“`
$ bundle config –local build.mysql2 “–with-cppflags=-I/usr/local/opt/openssl/include”
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl/lib”
“`

再度bundle installをする

“`
$ bundle install
“`

エラー:Routing Error_Uninitialized constant HomesControllerにつまづいた話

Ruby on Rails ver.5.2.5にて通販サイトの作成をするにあたり、namespaceとscope moduleの使い分けができておらず発生したエラー。
初心者ゆえの初歩的なミスですが、備忘録として記しておきます。

■エラー内容
devise にて管理者側と顧客側を定義し、namespaceによりcontrollerをそれぞれ[controllers/admin]と[controllers/public]に棲み分けて作成しました。
そしてrutes.erbを以下のように記載

![スクリーンショット 2021-09-13 20.34.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2019141/99da92bd-ce8b-107d-1397-74b61a022598.png)

各controllerにアクション名を定義し、いざサーバー起こしてページ確認しようと思ったら、、

Routing Error
Uninitialized Constant HomeController

【Rails6 コメント機能でよくある問題の解決方法】

#実装内容
`以前に投稿したコメント機能実装の記事`では、お伝えできなかったコメント機能で**起こりうる問題点**とその**解決方法**をまとめてみました。

https://qiita.com/taddy_korokoro/items/4d75e33ceb5c7a5124a8

https://qiita.com/taddy_korokoro/items/6faf37702dccb2c7ca32

#解決する問題一覧
– 改行問題
– 半英数字の連続文字によるはみ出し問題

##改行問題(プレビュー)

###before
[![Image from Gyazo](https://i.gyazo.com/8ae6430be65f90358be48e9ad3e067fb.gif)](https://gyazo.com/8ae6430be65f90358be48e9ad3e067fb)

###after
[![Image from Gyazo](https://i.gyazo.com/3f6216e2401e140443700bead78c5169.gif)](https://gyaz

rails g kaminari:views bootstrap4でNo such file or directoryのエラー解決方法

## 実装したいこと
* ある記事を参考に“gem ‘kaminari’“を導入してページネーション機能を作ろうとしておりました。

* gemの導入後に、“% docker-compose run web rails g kaminari:views bootstrap4“コマンドを実行したところタイトルのようなエラーが発生したので解決に至るプロセスをまとめようと思います。

## エラー内容

>% docker-compose run web rails g kaminari:views bootstrap4

“`ruby
% docker-compose run web bundle exec rails g kaminari:views bootstrap4
Creating locat_web_run … done
Running via Spring preloader in process 29
/usr/local/bundle/gems/kaminari-core-1.2.1/lib/generators/kaminari/views_generat

SQLを学ぼう!【3章】

前章の記事(SQLを学ぼう!【2章】)では、MySQLに接続し、挿入したデータを検索して表示させる作業を行なっていきました。今回は挿入したデータを更新する方法とデータを削除する方法について行なっていきたいと思います!
前章をご覧になりたい方は下記のリンクからご参照ください。
・[SQLを学ぼう!【1章】](https://qiita.com/haruki25596/private/8c1200db79fb9ae2200b)
・[SQLを学ぼう!【2章】](https://qiita.com/haruki25596/private/9bab1c3cf66cb7d4ba41)

##データを更新する
前章([SQLを学ぼう!【2章】](https://qiita.com/haruki25596/private/9bab1c3cf66cb7d4ba41))で作成したデータを今一度、確認しておきます。

“`ruby:ターミナル
mysql> select * from list;
+——+—————+—————————+—

SQLを学ぼう!【2章】

前章の記事(SQLを学ぼう!【1章】)では、MySQLに接続し、データベースの作成や指定、指定したデータベースにテーブルを作成し、データを挿入する作業について行いました!今回の記事では挿入したデータを検索し、表示させる作業を行なっていきたいと思います。

前章をご覧になりたい方は、下記にリンクを貼っておきますので、ご参照ください。
・[SQLを学ぼう!【1章】](https://qiita.com/haruki25596/private/8c1200db79fb9ae2200b)

##前章の復習
前章の復習になりますが、作成したlistテーブルに、データを挿入しました。
テーブルへデータを挿入するには、**INSERT文**を用いて行いましたね。

**INSERT INTO テーブル名 (カラム名1, カラム名2, …) VALUES (値1, 値2, …);**

“`ruby:ターミナル
mysql> INSERT INTO list (id, name, address) VALUES (1, ‘学 太郎’, ‘東京都世田谷区’);
Query OK, 1

SQLを学ぼう!【1章】

今回はSQLについて学んだ結果、私自身の備忘録としてこの記事を書きました。
SQLを実際に使いながら、データベースの作成、一連のデータ操作(挿入、更新、削除)を行なっていきたいと思います。
よろしくお願いいたします。

#SQLについて
SQLとはデータベース内のデータを操作する**プログラム言語**になります。
データベースを操作する際に必須の知識です。
それでは、SQLを使いながらデータベースを操作していきましょう。

##データベースを確認する
まず、MySQLに接続しましょう。補足ですが、今回の記事では**EC2からRDS(MySQL)へ接続方法については触れません。**MySQLへの接続方法がわからない方は申し訳ありませんが接続方法を確認してからこの記事を読んでいただくようにお願いいたします。

MySQLに接続したら、**「mysql> SHOW DATABASES;」**と入力して、存在するデータベースを確認してみます。
初期設定では、下記の5つのデータベースが作成されています。

“`ruby:ターミナル
mysql> SHOW DATABASES;
+——-

「bundle exec cap production puma:start」が使えない時の対処方法

#はじめに
下記の記事を参考に本番環境を構築中、
https://qiita.com/d0ne1s/items/2dd0ec73db1b0f473509
「bundle exec cap production puma:start」実行時にエラーが発生したため
解決方法をまとめた。

#エラー内容
“`
% bundle exec cap production puma:start
(Backtrace restricted to imported tasks)
cap aborted!
Don’t know how to build task ‘puma:start’ (See the list of available tasks with `cap –tasks`)

(See full trace by running task with –trace)
“`
#環境
rails 6.1.4
ruby 2.7.3
nginx 1.20.1
puma 4.3.8

#解決方法
Capfileに「install_plugin Capistrano::Puma::Daemon

ページング kaminari ページャ

“`ruby:gem
gem ‘kaminari’,’~> 1.2.1′
“`
“`ruby:ターミナル
$ bundle install
$ rails g kaminari:config
$ rails g kaminari:views default
“`

“`Ostomy/index.html.erb
:
<%= paginate @ostomies %>
“`

ページ数 指定する

.page(params[:page]).reverse_order

“`app/controllers/〜controller.rb

#デフォルトで件数設定されているので後で変更

def index
@ostomies= Ostomy.all.page(params[:page]).reverse_order
end

#それか.per(ほしいページ数)    .reverse_order:最新から表示
def index
@ostomies= Ostomy.all.page(params[:page]).per(7)
end
de

単体テストの下準備 手順

※著者がiMacユーザーの為、
コマンドは「ターミナル」で実行するものとして記述しています。

Ruby on Railにおける
単体テストの手順をまとめます。

1. gem ‘rspec’インストール
2. rails g rspec:install
3. .rspecに–format documentation
4. rails g rspec:model モデル名

#1. gem ‘rspec’ インストール

Gemfileに記述後、コマンドでbundle installをかけます。

注意点は、Gemfileの行末ではなく
group :development, :test do
の箇所に記述するところ。

“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]

【Ruby on Rails】退会機能をgemなしで実装する方法

#対象者

* 退会機能を実装予定の方

#目的

* 退会機能を実装して退会後、ログイン出来ないようにする

#実際の手順と実例
###1.deviseの導入

User認証で新規登録とログインを行うためにdeviseを導入します

https://qiita.com/nao0725/items/83c73c417be01913a857

“`Gemfile.
gem ‘devise’
“`

““Terminal.
$ bundle install
$ rails g devise:install
$ rails g devise user name:string is_valid:boolean #①
$ rails g devise:views
““

①で退会したかどうかを判断するカラムを作成しています。
booleanは真偽のどちらの値なのかを決めるデータ型です。

Rubyでbooleanの判定を行う方法を現役エンジニアが解説【初心者向け】

boolean型はデフォルト値を設定する必要があるので、マイグレーションファイルを編集します。

“`db/mi

トランザクションとは。

# はじめに
本記事では、トランザクションについて記述しました。
トランザクションとはなんですか?
と聞かれた際に、私は何も答えることができませんでした。
悔しかったので調べました。

# トランザクションとは
`レコードの更新を行う複数の処理を1つにまとめて行うこと`を指します。

トランザクションを利用することにより、
「処理の一部は成功し、一部は失敗した」という事象は発生せず、
`すべての処理の成功または失敗のみの状態`を作ることができます。

### Railsではこのような利用

“`ruby
ActiveRecord::Base.transaction do
処理1
処理2
処理3

end
“`
ここに処理1、処理2…を1つのまとまりとして記述することで、
処理が1つでも失敗すれば、全体としての処理は失敗ということになります。

# トランザクションのACIDプロパティー
以下を参照しています。
トランザクションは、銀行のATMに例えることが多いみたいです。
かなりわかりやすいので勝手にオススメです。
[トランザクションの ACID プロパテ