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

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

Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第3章】(6.エラーの処理)

## 概要
前回の記事(第2章)の続きです。
[Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第2章】(3.リファクタリング〜5.バリデーションの設定まで](https://qiita.com/web_fumiya/items/c58bbae366d4d813296f)

今回の第3章では、バリデーションエラーが発生した際のエラーの処理を実装していきます。

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

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

## エラーの処理
前回の記事でバリデーションを設定したことにより、空文字投稿、文字数制限を超える投稿をしたらクソアプリをMVCからDDDに無理やり直してみた

# 今回作ったWEBサービス
https://ojitalk.com/
![oji.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920917/fbdaa970-c118-f541-1942-705842af0c52.gif)
こんにちは!ちゃきです!
定期的にクソサービスを個人開発して世の中のドメイン無駄遣いしてます!
そろそろQiita更新しないとヤバいと思い書きました。

転職前も転職後もPHPをほとんど使っています。
しかし社内のサービスはほとんどrailsで作られているため、今後の為にrailsの勉強の一環として
今回のサービスを作りました。
てか社内にlaravelエンジニア全然いない。

## どんなサービスか?
登録してある若者言葉をおじさんでもわかる単語に変換してくれる***チャットアプリ***です。
おじさんの言葉も若者がわかるように変換します。
最初から登録してある単語以外にも追加はできます。

|                                       

Rails6で通知機能を実装(ポリモーフィック)手直し版

前回投稿した通知機能をポリモーフィックを使って実装しましたが、途中からうまく使えていませんでした。
下記記事のenumの設定から分岐してviewまでを修正して書いていきます。
この記事から見られた場合はenumまでは下記記事を見てください

https://qiita.com/ttymryo/items/79dcf9fd83d0c09e8775

## enumの設定

“`ruby:model/activity.rb
enum action_type: {
favorited_the_diary: 0,
followed_you: 1,
commented_on_the_diary: 2
}
“`

通知する内容をなんとなく翻訳にかけて分かるように書いてあります
後で日本語化するので単語一個だと分かりにくくなります

## create時に通知を入れる
通知したい内容がcreateされたときにactivityをcreateするようにします

“`ruby:model / favorite.rb comment

【Rails】フロントから渡ってきたパラメータをバックエンド側で編集できない

以下のような感じのバックエンド側に渡したストロングパラメータをgsubでちょこっと手を加えようとしたらできなかったので備忘録も兼ねてメモ。。。
“`ruby
def permit_params
params.require(:form_params).permit(:param1,
:param2,
:param3)
end
“`

挙動としては以下のような感じ、、、
“`ruby
permit_params[:param1].gsub(“hoge”,”fuga”) #←これをログ出力したらきちんとgsubが効いているが、、、
permit_params[:param1] = permit_params[:param1].gsub(“hoge”,”fuga”) #←こんな感じで値を更新しようとしても書き換えができない。エラーとかも出ない。。。
“`

対応
ストロングパラメータを他の変数に一旦、移してそっちを編集する。

【ruby】文字列から半角空白と全角空白を全て削除する

自分用メモ
“`ruby
str.gsub(/ | /,””)
“`

戻り値を理解して使い分けるfindとfind_byとwhereと、時々、オトン

過去のコードレビュー時にActiveRecordでのデータ検索の記述でfind, find_by, whereの使い分けが適切ではなく指摘を受けることが何度かあり、今もたまに検索失敗時の戻り値ってどれがどれだっけと曖昧になることがあるため備忘録がてら概要をまとめました。

## 大まかな使い分けの判断基準
結論から先に書くと以下のような条件で用途が変わってくるかと思います。

### find
– 取得したいデータのidが特定されている
– 検索対象が特定できなかった場合に**例外を返したい**

### find_by
– id以外のプロパティでデータを取得したい
– 検索対象が特定できなかった場合に**nil(false)を返したい**

### where
– id以外のプロパティでかつ**複数のデータ**を取得したい

## findメソッドの概要
– 各モデルのidを検索キーとしてデータを取得するメソッド
– id以外の条件で検索不可
– 戻り値は検索対象のクラスのインスタンス
– 取得したいデータのidが特定されている場合に使用

“`ruby
# 単一のIDを指定
C

三項演算子で変数を定義する

## はじめに
三項演算子で変数を扱う機会があったので、記事にしました。
サンプルコードでは、admin権限の有無でメッセージ内容を変更させます。

## 三項演算子とは
三項演算子を使うことで、if文のコード量を減らすことができます。
“`rb:if文
if user.admin?
“Hello”
else
“Hi!”
end
“`

“`rb:三項演算子
user.admin? ? “Hello” : “Hi!”
“`
複雑すぎるif文は三項演算子に向いていません。かえって可読性が低くなります。

## 変数ver

一応、if文も記述しておきます。

“`rb
if user.admin?
message = “Hello”
else
message = “Hi!”
end
“`

最初に試した三項演算子。
“`rb
user.admin? ? message = “Hello” : message = “Hi!”
“`

変数の重複が気になるので以下のように修正しました。
“`rb
message = user.admin?

Railsのクラスメソッドについて考える

# 本題
– Railsで書いてるとクラスメソッドでいろいろやりがちにならない?と思ったので解決策を考える。

### ファーストクラスコレクション 
[良いコード、悪いコードで学ぶ設計入門](https://www.amazon.co.jp/%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%8F%E6%82%AA%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E5%AD%A6%E3%81%B6%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80%E2%80%95%E4%BF%9D%E5%AE%88%E3%81%97%E3%82%84%E3%81%99%E3%81%84-%E6%88%90%E9%95%B7%E3%81%97%E7%B6%9A%E3%81%91%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-%E4%BB%99%E5%A1%B2-%E5%A4%A7%E4%B9

初めてのペアプロで僕が学んだこと

# 記事を書こうと思った経緯
私は現在、[fjordbootcamp](https://bootcamp.fjord.jp/)(以下 fjord)でWEBエンジニアになるための学習をしております。
fjordではメンターさんへの質問はもちろん、ペアプロも行っていただけます。

先日、初めてペアプロを行っていただいたのですが、その際に得た気づきが大変多かったので記事にまとめようと思いました。

ペアプロを行った経緯については主に下記2点が挙げられます。

– 自身の質問の作法が不十分であった
– デバッグ(仮説と検証)ができていない

そして実際にペアプロを通して、自分の弱点及び、それをどう改善していくかという気づきや、デバッグの際のテクニックを学ぶことができたので以下まとめていきます。✏️

まとめとしては下記3点です

– [質問をする際に気をつけたいこと](https://qiita.com/drafts/6d9c165f016952673729/edit#%E8%B3%AA%E5%95%8F%E3%82%92%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB

【個人開発】プログラミング初学者がアイデア探しアプリを作りました

はじめに

![スクリーンショット 2022-08-26 3.24.31のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2683200/54899e84-2ed3-a5ba-ca08-ff6cb97c5bb5.png)
こんにちは @yunoM と申します
プログラミング学習を始めて4ヶ月が経ち、
先月初めて個人開発したアプリ「myru」が完成したので記録します✏️
このアプリの概要や思いについて書きましたのでよければ最後までお付き合いください!

【Twitter】

【今回作ったアプリ】
https://polar-escarpment-12121.herokuapp.com/
【GitHub】
https://github.com/fynmrtsk1225/myru_app

アプリを作ったきっかけ

家にいる時間が長くなったことで「おうち時間」に注目が集まった近年
何をして過ごすか以外にも「どんな部屋で過ごすか」に

【Rails】devise auth tokenをcookie認証にカスタマイズする

# はじめに
APIの認証で使用されるgem`devise auth token`をデフォルトで採用されているBearer認証からcookie認証へカスタマイズする方法を紹介します。
`devise auth token`の基本的な使用方法は以下記事などを参考にしてください。

https://qiita.com/Masahiro_T/items/6bc49a625b437a7c2f45

https://qiita.com/tomokazu0112/items/5fdd6a51a84c520c45b5

### デフォルトの認証
“`ruby
before_action :authenticate_user!
“`
devise_token_authでは、上記のようにcontrollerで記述した場合実行前に認証が行われる。
通常認証の方法はsign-inのリクエストを送信したレスポンスHeaderにある`access-token`, `client`, `uid`を毎回リクエストヘッダに追加することで、認証することができる。( RFC 6750 Bearer Token に準拠

【Rails初心者】コメント機能追加まとめ

## _【Rails初心者】コメント機能追加まとめ_
コメント機能を追加する方法を自分なりにまとめてみた…

## コメント機能とは?
投稿された画像に対して、コメントをつけることができる機能
・コメント欄には、意見や返答を書き込める
・書き込まれたコメントは、更新日時が新しいコメントが、上から順に表示される

[サイボウズ Office マニュアル](https://jp.cybozu.help/o/ja/user/app/ms/basic/comment.html) がイメージをつかみやすかったです
_※マニュアル系は自分が、今後機能を盛り込むときの参考資料として使えそう!!_

## 必要なこと
– コメント機能に必要な DBの追加
– モデル作成
– モデルに関連付けを追加
– Routing編集
– コントローラを作成
– View編集

## コメント機能を作成
### 1.コメント機能に必要なDBを確認する

| カラム名 | データ型 | カラムの説明 |
| :—: | :—: | :—: |
| id | integer | コメントごとのID |

Rails/InverseOfの謎 activerecord関係 忘却録

##はじめに
この記事は自分のために書く忘却録である
また初学者が記載しているため不備があると思われるが指摘していただけると幸いです。
また違う実装方法の提案や助言など嬉しく思いますのでコメントに記載していただけると幸いです。

## 背景
rails : 6.1.6
ruby : 3.1.1p18

フォロー機能の追加をする際に出現した
課題をしている際にrubocop上に下記のような警告が出現
`Rails/InverseOf: Specify an :inverse_of option.`

全く検討がつかなかったのでドキュメントを確認したところrailsの公式ドキュメント([3.5 双方向関連付け](https://railsguides.jp/association_basics.html#%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91%E3%81%AE%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%82%92%E5%88%B6%E5%BE%A1%E3%81%99%E3%82%8B))でこのような記載がある
`Ac

RailsアプリでSpotifyAPIのソーシャルログインを実装

# RailsでSpotifyAPIとOmmniAuthのソーシャルログインを実装

## 環境
* Ruby 3.0.3
* Rails 6.1.4

## 前提
`Authorization Code Flow`というエンドユーザーの情報を取得でき長時間実行アプリケーションに適しているものを利用します。
https://developer.spotify.com/documentation/general/guides/authorization/code-flow/

他にも2種類のトークンがあるので目的に合わせてトークンの発行をしてください。

Spotifyでのログインのみなのでdeviseだったりを使わずに実装します。

## 手順
### 1\. SpotifyAPIを利用するための準備
下記のリンクがSpotifyAPIを利用するときの設定等を行うサイトになります。
https://developer.spotify.com/dashboard/
[![Image from Gyazo](https://i.gyazo.com/7a5ac245300bc15826dc1

Railsの非同期いいねの方法

今回はRailsの非同期いいねの方法について紹介します。

参考記事
https://zenn.dev/odentravel/books/e69a157daeecb3/viewer/b583e5
https://zenn.dev/odentravel/books/e69a157daeecb3/viewer/6d1551

### 同期いいねの作成
参考記事では、postとuserの紐付けになっていますが、自分はrecruitmentとuserの紐付けになります。
最初にmodelを作成して、dbマイグレイトを行います。
“`ruby
rails g model Favorite user_id:integer recruitment_id:integer
rails db:migrate
“`
次にアソーシエーションの設定をします。

“`ruby
#models/user.rb

class User < ApplicationRecord #〜省略〜 has_many :favorites, dependent: :destroy end ``` ```ruby

【個人開発】「ロードバイク乗りのためのお店検索WEBアプリ」制作しました【Cycle Depot】

# 本記事の対象者
– 個人開発アプリ、オリジナルアプリ開発に興味がある方
– ロードバイクが趣味の方
– タイトルに興味を惹かれた方

# WEBアプリURL
https://cycledepot.herokuapp.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668589/7e0520e9-bcd0-f6e0-d481-a06cd54868fe.png)

# オリジナルアプリ概要
– 名称: Cycle Depot(「サイクルデポ」と読みます)
– 開発環境:
– Ruby3.0.1
– Rails6.0.5.1
– PostgreSQL1
– 説明:
ロードバイクに乗っていて気軽に入れるお店が中々見つからないなと感じたことはありませんか?
  ロードバイクは高価であるということに加えて、スタンドが付いておらず自立しないため駐輪場所に困ることが多いと思います。そんな時にサイクルラックを置いてくれているお

Rails6で通知機能を実装(ポリモーフィック)

Railsで通知機能を実装した際にポリモーフィックの存在を初めて知ったのとあまり記事がなかったので参考になればと思い書いていきます

理解が間違っているかもしれません。何かあればコメントお願いします。

また、下記の記事を参考にして実装を行いました。かなり重複する内容があります。この記事はそのままではできなかったところの修正と、実装で疑問に思ったことを書いてあります。考えながら実装したい方は下記の記事から見るといいかもしれません。

https://qiita.com/sazumy/items/479cb14cfea77c7429bd

## 今回作成するサンプル
![通知機能.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821961/af6b81a6-9079-2136-feb8-8bbb1d925f2f.gif)

今回通知用のページを作って実装しました
この記事ではviewは簡単な部分しか書いていません

## バージョン
rails 6.1
ruby 3.1.2

## 前提
下記ができ

bcrypt_ext.bundleインストール時にmach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))のエラー発生

# 事象
アプリの動作確認時に、エラー画面が表示され、ターミナルに以下のエラーが表示された。
“`
dlopen(/Users/arakijun/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bcrypt-3.1.18/lib/bcrypt_ext.bundle, 0x0009): tried:

‘/Users/arakijun/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bcrypt-3.1.18/lib/bcrypt_ext.bundle’ (mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))) –

/Users/arakijun/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bcrypt-3.1.18/lib/bcrypt_ext.bundle
“`
`bcrypt_ext.bundle`の`x86_64`がインストー

【初・個人開発】公園検索コミュニティアプリ 「COMO(コモ)」 作りました

# はじめに
こんにちは、ご覧いただきありがとうございます。@Rei33_Qiitaと申します。
このアプリは、私の実体験とママ友からの意見を元に、子供と公園に遊びに行く前にしている、「ある」ことを時短できたらいいなと思い作ったアプリです。

「ある」こと、とは、そう「リサーチ」です!

小さな子供がいる家庭は事前の下調べをしっかりする傾向にあります。
その下調べが意外と時間がかかるのです。
このアプリは下調べを時短し、公園をもっと楽しむ目的で制作しました。

# 使用環境
ruby 3.0.4
Ruby on Rails 6.1.6
PostgreSQL 14.4

# 問題の洗い出し
ヒアリングで出てきた、下調べの主な内容
– 遊びたい遊具があるか(赤ちゃんブランコなど)
– 必要な施設があるか(トイレ、休憩所)
– 季節の遊びは始まっているか(じゃぶじゃぶ池)
– 周辺情報(食事が取れる場所はあるかなど)
– イベントやっているか(盆踊り・シャボン玉・自然体験など)

# 問題解決のために実装した機能と使いかた
– 住所から公園の検索
– 遊具・施設から公園の検索
![検索

新人エンジニアが感じたあんなことやこんなこと

## はじめに

みなさんこんにちは。
プログラミング歴4ヶ月の新米エンジニアです。
入ったばかりの頃は「おぶじぇくとしこう?^_^」みたいな感じでしたが、最近ようやく慣れてきました。

うちの会社のエンジニア部門は、5人ほどのチームに分かれて開発を進めています。
新人だった私もチームに配属されて3ヶ月が経ったので、実際に働いてみて感じてきたことをエンジニア・新社会人それぞれの視点でまとめていこうと思います。

## 〜エンジニア編〜

### その動詞どういう意味?

初期の初期に感じていたことはこれです。
「走る」「叩く」「吐く」「食わせる」など、その動詞自体は知っているけどどういう意味で使っているのかが分からないという言葉がゴッロゴロありました。
話の流れ的に多分こういう意味なんだろうな〜となんとなくは推察していましたが、慣れるまではエンジニア特有の言い回しに戸惑いまくってました。

### RubyMine、便利すぎ

本当にすごいですよね、RubyMine。
それまでプログラミング用のコードエディターを使ったことがなかった私にとって、RubyMineの機能は衝撃的なものばかり