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

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

実務未経験から二週間でRuby技術者認定試験Silverに合格

9月の下旬にRuby技術者認定試験Silverを受験した所、無事合格する事ができました。勉強期間は二週間弱、得点は84点でした。

具体的な学習時間は集中できたのが平日2〜3時間程度。休日は他の用事があったため勉強していませんでした。試験の前日のみ+3時間学習しています。
Webエンジニアに転職したばかりで、Rubyの実務経験はありません。Railsチュートリアルを軽くやってみたくらいです。

##勉強方法と教材

使った教材は以下の三つです。

* [RubyExamination](https://rex.libertyfish.co.jp/)

恐らく一番利用したサイトです。ほぼ毎日50問を解いて、最終的には9割安定して取れるようになりました。最初はまるで点数が取れないと思いますが、まず解いてみて「解説で分からない事があったら調べる」事を繰り返すと良いです。

* [[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応)](https://www.amazon.co.jp/%E6%94%B9%E8%A8%822%E7%89%8

SIerからWeb系エンジニアへジョブチェンジ

#はじめに
– Web系自社開発企業3社(自社サービス:1社, 自社サービス+受託2社)に内定
– Web系エンジニアを志したきっかけは[勝又さん](https://twitter.com/poly_soft)の[YouTube動画](https://www.youtube.com/channel/UC_HLK-ksslL-Z_2wiIZDlMg)

転職までに利用したサービスは、以下の通りです。

– [雑食系エンジニアサロン](https://twitter.com/poly_soft)
– [MENTA](https://menta.work/member/dash)
– [Tech Academyフロントエンドコース](https://techacademy.jp/)

#自己紹介
– 年齢:23歳(新卒2年目)
– 会社:元請けSIer
– 職業:システムエンジニア
– 成果物:[github](https://github.com/umaibou1126)

![構成図-Page-1 (2)](https://user-images.githubus

【なぜそれをやるかの解説付き】Railsの認証機能付きCRUDアプリで、他人に編集をさせなくする方法

## はじめに

[yuki](https://twitter.com/yuki82511988)と申します。DMMWEBCAMP にお世話になって、今は WEB エンジニアとして勤務しつつ、自分で仲間を集めてサービス開発したり、プログラミングの家庭教師したり毎日エンジニアライフをエンジョイしています。

未経験から目指している方向けのサポートやエラー質問なども引き受けておりますので、気になった方は DM へお願いします。

今回は認証機能のある CRUD アプリでよくある、自分の投稿の編集を他人にさせない機能について解説します。

## 前提

– crud アプリと言って通じる方
– Rails の簡単なアプリを作成中の方
– Rails を触るのが初めてもしくは期間が短めで、現在学習中の方
– devise などで認証の設定、crud 機能の実装が終わっている

## 最終目標

投稿を編集する URL をベタ打ちで入力したとき、投稿者と編集者が異なる場合、一覧ページなどにリダイレクトさせる機能の実装

“`example
# post/1/editなどのURLを入力する
#

MySQLのデータベースのテーブルの全レコードを削除する

初学者の忘備録として

下記コマンドを実行しサインイン

“`ターミナル
$ mysql -u root -p
“`

下記コマンドでデータベース名確認

“`ターミナル
mysql> SHOW databases;
“`

削除したいテーブルのデータベースに移動

“`ターミナル
mysql> use [データベース名]
“`

もしテーブル名の確認が必要な場合は下記のコマンドを実行

“`ターミナル
mysql> SHOW tables;
“`

テーブル名確認後下記コマンドを実行

“`ターミナル
mysql> TRUNCATE TABLE [テーブル名];
“`

自分の場合は上記の手順にてテーブルの全レコードを削除することができました。
もっといい方法がございましたら、コメントをいただけると幸いです。

参考サイト
https://qiita.com/nanatsu/items/33b57238b0e9ae0a1c78

Railsで発生したAutoprefixer doesn’t support Node v4.8.2. Update it.エラーについて【Docker Rails5 Bootstrap】

# はじめに
DockerでRails開発を行っていたら急に下記のエラーが発生して、アプリが開けなくなった。
![6f7d96c8994be656c8439daf32b138aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556037/8721fbf2-4821-83b8-6cc3-da3b98349147.png)

まず、エラー文を見てみると「Autoprefixer doesn’t support Node v4.8.2. Update it.」と書かれており、翻訳すると「AutoprefixerがNode v4.8.2に対応していません。アップデートしてください。」とのこと。

Node.jsのバージョンを下記コマンドを実行して確認してみると、エラー文のとおりv4.8.2らしい。

“`sh
docker-compose run app nodejs -v
v4.8.2
“`

# 原因
調べているとBootstrapが原因であることがわかった。Bootstrapのソースコードでは、ベン

【rails】deviseにストロングパラメーターを追加する

deviseと言うgemをインストールすると、ログイン、サインアップ機能が簡単に実装できますが、
あらかじめストロングパラメーター(パスワード、メールアドレス)が備わっています。

しかし、ログイン、サインアップをする際に、他のストロングパラメーター(名前、画像等)も欲しいことありますよね。

その場合にストロングパラメーターを追加する方法をアウトプットいたします。

※deviseの詳しい説明については
https://qiita.com/gogotakataka1234/items/0125b7d50ded8968a745
を確認ください。

#devise_parameter_sanitizerを使おう!

devise_parameter_sanitizerをメソッドを使うと、deviseで設定されているストロングパラメーターにパラメーターを追加することができる。

使い方の例

“`csharp
devise_parameter_sanitizer.permit(追加したいメソッドの種類, keys: [追加したいパラメーター名])
“`

例えば、サインアップ時に画像の

自己代入演算子

#自己代入演算子(+=, -=, *=, /=)
**自己代入とは、その名の通り自分自身に代入するということです。
自己代入演算子は、通常の演算子を用いた書き方を省略して記述できます。**

例としてnumber = number + 1を自己代入演算子+=を使った書き方に直してみましょう。

“`java:【例】通常の代入演算子
number = number + 1
“`

この式を自己代入演算子+=を使えば以下のように書き直せます。
これらは同じ意味になります。

“`java:【例】自己代入演算子
number += 1
“`
上記ソースコードを比較するとわかるように自己代入演算子を使った式number += 1は、変数numberに1を足した値をnumber自身に代入する

再代入

#再代入
**1度値を代入したあとの変数に、別の値を再び代入することもできます。
つまり、変数の値は別の値に変更できます。**

プログラム中に何度でも変更可能であることも変数の特徴です。

以下の例を見てください。

“`java:【例】irb
# 変数に代入
irb(main):001:0> value = “Hello World”
=> “Hello World”

# 変数を出力
irb(main):002:0> value
=> “Hello World”

# 変数に再代入
irb(main):003:0> value = “See you”
=> “See you”

# 変数を出力
irb(main):004:0> value
=> “See you”
“`

変数の値が後から代入したものに書き換わっていることがわかります。
Rubyでは、変数にはどんな値でも代入できます。もちろん、変数に対してメソッドを使うこともできます。

代入を利用して、以下のように記述すれば、変数自身の値を利用した計算結果と入れ替えることができます。

“`java:【例】irb
# 変

代入

#代入

**変数のあとの=(イコール)は数学の方程式のように等しいという意味ではなく、
「変数の箱の中に値を入れる」という意味です。
これを代入と言います。**

この=は**代入演算子**と呼びます。

ここで必ず覚えておくべき重要なポイントですが、
**「Rubyにおいて=が1つの式は必ず『右側の値を左の変数に代入する』という意味」**であることです。

![りんご.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762918/e92657b5-c689-26b7-5a6c-f0f6115401c4.png)

“`java:【例】irb
# piという変数の中身を、円周率の3.14159であると定義する
irb(main):001:0> pi = 3.14159

# piを呼び出すと、格納された3.14159が返ってくる
irb(main):

webサイトが画面が表示されるまでの仕組み

# ウェブサイトの画面が映る仕組み
分かっていそうで理解しきれていなかった内容をまとめていきたいと思います。

## 重要ワード
– IPアドレス
– ドメイン
– DNSサーバー
– スキーム
– パス
– クライアント

# 基本の理解
https://qiita.com/questions/new
例えば今アクセスしているURLはこんな感じになっています!

この中で”https” この部分のことをスキームといいます。
簡単にいうとどんな手段で通信するの?
といった意味です。今では大体はhttpsではないのでしょうか?

ちなみにスマホとかでよく”このサイトは安全ではありません”とか出てくることがあるのは
httpsではなくhttpが使われている場合です!

httpsとはデータが送信される時にそのデータが暗号化されるようになっています。
これに大してhttpは通信が暗号化されていないと言ったセキュリティに関して少し甘いところがあります!

もしデータが抜き取られてしまった時に暗号化されていた方が安心ですよね。

つづいて”qiita.com”の部分はドメインと呼ばれています!

Ajax通信でコメントを削除する

Ajaxを用いたコメント削除機能を実装するにあたり詰まった点がいくつかあったので、記録として残しておきます。
実装イメージは以下の通りです。
![ForGif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700117/da2dcf1e-2016-4a2d-6c53-0b6ad0a21a59.gif)

詰まった点は以下の2点です。
1.ネストされているコメントに対する削除方法(引数をどのように渡せばいいか)
2.js.erbファイルの記述方法

この2点に対する解決方法を記述をします。(解決までに自分が行ったことも書いていくため、長くなります。)

環境は以下のとおりです。
ruby 2.6.5
Ruby on Rails 6.0.3.3

## 1.ネストされているコメントに対する削除方法(引数をどのように渡せばいいか)
まずは同期通信で削除ができるように実装を進めていきましたが、いきなり躓きました。ネストされている機能(今回の場合はコメントに関する機能)を削除したことがなかったからです。
とりあえ

deviseで記述があっているのに、ログアウトできない現象

#はじめに
 deviseを導入してユーザー管理機能を実装していたが、予期せぬエラーに見舞わせたので、記録しておく。

##エラー内容
Routing Error
No route matches [GET] “/users/sign_out”

“`ruby
<%= link_to 'ログアウト', destroy_user_session_path, method: :delete, class: :logout %>
“`
もちろん、`method: :delete`とビューファイルにも記述していた。なぜか、ルーティングでHTTPメソッドがGETのものを探し出していた。

###ローカルサーバーを再起動させる
ターミナルで
「control + c」
入力。
再び、ターミナルで「rails s」実行

###荒技!?

“`ruby:config/initializers/devise.rb/269行目
config.sign_out_via = :delete
“`
`:delete`を`:get`に変える。

##最後に
 記述もあっているのに、なぜこのエラーが出たの

Ruby縦書き

#rubyで縦書きする方法
#結論
“`java:
a = gets.chars
puts a
“`
#例えば下記のようにgetsにtokyoを当てはめると
“`java:
a = Tokyo.chars
puts a
“`
#出力結果
“`java:
T
o
k
y
o
“`
#という感じになります
#以上

ActiveStorageを用いた画像表示で陥ってしまったミス

本記事は正しく機能を実装できている方には無縁かもしれません・・・
ActiveStorageを用いたメッセージ投稿機能のようなものを作成していました。投稿したメッセージを表示するビューファイルを作成したので挙動を確認しようとしたところエラーが発生しました。ロジックは合っているのになぜ・・・

## 原因
開発途中で挙動確認をしていた際、画像を添付していなくても投稿できたことがあったことを思い出しました。
has_one_attachedによるアソシエーションがうまく組めていなかった時にメッセージだけの投稿データがテーブルに登録されていました。前述の通りアソシエーションを組んでいたため今回作成したビューファイルを開く際にエラーが発生しました。

## 解決方法
私の場合はテーブルの状態を確認できるSequelProを導入していたので、当該レコードのみを直接削除して対応しました。本来であればテーブルに対してresetを行う方が正しいとは思いますが、個人の開発であればこちらでも良いのかな、、、(良くない)

以上、ロジックだけではなく違う側面も考えられる広い視点が必要だと感じた出来事でした

AWSで80ポートを開いてるのに【このサイトにアクセスできません】が出る

![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536448/8a8781d3-ec40-2c58-8c1e-b73fec1ee149.png)

先日Railsアプリをsslで通信したいと考えRailsで**config.force_ssl**を設定してからなぜかアプリが表示されなくなったため、その時の対処法をまとめました。

## アプリの状態

|アプリ名|my-app|
|:-:|:-:|
|server|EC2|
|web server|nginx|
|application server|unicorn|
|解放ポート|80, 443, 22|

## まずはセキュリティグループを確認

いつものことかと思い

**AWS→セキュリティグループ→対象のパブリックなセキュリティグループを確認**

しかし特に異常は見つからず80番と443番はしっかり開いてました。
普通なら通信はできるはずなのですが…

ちなみにlocal環境からEC2インスタンスへssh通信はできているよう

ライブラリの導入

前回の記事でアプリを作成したらライブラリを導入する。
ライブラリとはGemの事で、開発を迅速に進めるための拡張機能。備忘録として残す。

Gemfileの中にアプリで使う名前、バージョンを管理。

ファイルに記載したらターミナルにて bundle install をする。

“`
Gemfile

# Use mysql as the database for Active Record
gem ‘mysql2’, ‘0.5.3’  追加
.
.
.
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem ‘tzinfo-data’, platforms: [:mingw, :mswin, :x64_mingw, :jruby]

gem ‘pry-rails’  追加

“`
追加後、bundle update
今回はすでにあるバージョンの更新のため update

rails s をし起動すればOK

独学ではじめてAWSのEC2にデプロイする方法②(Elastic IPの作成と紐付け)

## 前回の記事
[はじめてAWSでデプロイする方法①(インスタンスの作成)](https://qiita.com/nousi/items/f0ab345402362e43db80)の続きになります。
インスタンスの作成などを知りたい場合は、この記事を参照してください。

## 今回実施していくこと
作成したEC2インスタンスには、作成時にIPアドレスが””自動””で割り振られています。
これを動的パブリックIPと言います。
しかし、””サーバーを停止・再起動させるたびにこのパブリックIPが変わってしまうという欠点””を持っています。

そのため、パブリックIDを固定して、いちいち更新しないようにします。
この固定化したパブリックIDを『 Elastic IP 』と呼びます。

今回はその欠点を改善するために、『 EC2インスンタンスとElastic IP紐付け 』をしていきましょう。

## Elastic IPの作成
EC2インスタンスのパブリックIPアドレスをElastic IPに固定する。
Elastic IPとは、AWSから割り振られた固定したパブリックIPアドレス。
この

学習アウトプット〜11/3〜

##生成したコードを元に戻す方法

「ああ、あの頃に戻れればなあと」自分の人生のある地点の後悔を引きずっている人は多いと思います。私にもそのような後悔はあります。

でも人生は元には戻れません。今に目を向けましょう。周りにいる人を見てみてください。その人たちと一緒に今を必死に生きていきましょう。

ということで、人生は元には戻せませんが、プログラミングは別です。
何か間違いがあれば何度でもやり直せます。笑

###コントローラ

“`terminal
$ rails geneate controllar motipuyo
“`
というようにmotipuyoという名前のコントローラを作成したけど、無かったことにしたいよって時は

“`terminal
$ rails destroy controllar motipuyo
“`
で削除されます。

コントローラは学校で言うとクラスの担任です。
modelやviewに指示を出すことで各クラスをまとめ、アプリケーションという一つの学校を成り立たせる。
今のところはこのようなイメージです笑。

###データベース

“`termin

Rubyの復習

本投稿の目的

Rubyの復習の自分用の議事録です。
以前,inputした知識のうち忘れたことを羅列して書いていきます。
そのため,自己満で書いただけなので脳に叩き込めたら消す予定です。

学習に使った教材

Udemyの [“はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう”](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) を教材として使用しました。

購入目的は以下の2つです。
①Cloud9上でRailsアプリを作ること
②デプロイすること

①配列とハッシュ

○配列

“`ruby:qiita.rb
a = [変数1,変数2,変数3]
“`
・添字は0から始まる
・変数2を取り出すには a[1]

○空判定

“`ruby:qiita.rb
a.empty
“`
⇨判定が空なら true

○検索文字判定

“`ruby:qii

検索を行うメソッド

# はじめに
検索機能をrailsで実装する際に、必要なメソッドについて解説しています。

## 1.whereメソッド
モデルが使用できる、ActiveRecordメソッドの1つです。
このメソッドにより、引数に記述した条件に一致するデータを取り出すことが出来ます。

“`
モデル.where(‘検索対象となるカラムを含む条件式’)
“`
## 2.LIKE句
LIKE句は、曖昧(あいまい)な文字列の検索をするときに使用するもので、whereメソッドと一緒に使います。

cが含まれる名前を取り出す際の記述

“`
where(‘name LIKE(?)’, “%c%”)
“`

%・・・任意の文字列

## 3.検索を行う際のコード
ここで、実際にコードを記述する場面を考えてみましょう。
例えば、ツイートテーブルのnameカラムに太郎という文字を含むデータを取り出す場合は、どんなコードとなるでしょうか?
もし、時間がある方は、自分で考えてみてください。

実際に記述は以下となります。

“`
Tweet.where(‘name LIKE(?)’, “%太郎%”)
“`