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

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

sprintfフォーマットの解説

##そもそもフォーマットとは?
フォーマットとは書式のことです。つまり、文字列や数値をどんな形式で表示させるかというのをきめるんです。
具体例を見ていきましょう

“`
n = 10
sprintf(‘%f’, n)
=> “10.000000”
“`
指示子に、%fをいれると、浮動小数点数(float)を出力します。他にも指示子があるので、[こちらの記事](https://k-koh.hatenablog.com/entry/2019/12/16/105428)を参考にしてみてください

##実際に問題を解いてみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/15264d1a-91d7-e9ec-90bf-15fd1cd88349.png)

問題で出されているコードでは、% 5とあります。これは、指示子ではないので、% 5は無視されます。
そのため、表示されるのは、Helloと表示されるため、選択肢➁が正解です。

###選択肢➂
これは先ほどの説明から不

元記事を表示

Kernel#loadは何をしているのか

# loadの使い所ってどこなの?

いろいろあって気づいたら年が明けてしまいましたが、Ruby3.1出ています。
関連記事でもいろいろと紹介されている通り、irbやデバッガ周り、ハッシュの省略記法などが入ってますね!

遅ればせながら[プロと読み解く Ruby3.1 NEWS](https://techlife.cookpad.com/entry/2021/12/25/220002)を見ている時に、ふとこの仕様が目に止まりました。

> Kernel#loadの第二引数で任意のモジュールを指定できるようになった
>
> Kernel#load now accepts a module as the second argument, and will load the file using the given module as the top-level module. [Feature #6210]

へえ、このオプション、なぜloadだけに入ってrequireには入らないのだろう?
そもそもどういうユースケースのために作られた機能なの?

そんな疑問をかかえながら、動作を確認し

元記事を表示

自作アプリを作る アカウント有効化のメール送信

Userのメイラーを追加します。
このメイラーはUsersコントローラのcreateアクションで有効化リンクをメール送信するために使います。

“`
ubuntu:~/environment/my_app (account-activation) $ rails generate mailer UserMailer account_activation password_reset
Running via Spring preloader in process 12921
create app/mailers/user_mailer.rb
invoke erb
create app/views/user_mailer
create app/views/user_mailer/account_activation.text.erb
create app/views/user_mailer/account_activation.html.erb
create app/views/user_

元記事を表示

Vue.jsとRailsでユーザ作成時の422 Unprocessable Entityエラー

# エラー内容
RailsとVue.jsプロジェクトで、ユーザ登録機能を実装した際
「422 Unprocessable Entity」 というエラーが発生し登録できなかった。

エラーメッセージを検索してみたけれど、原因詳細はなかなか探せず。。。
と思っていたところ、下記参考記事を見つけて解決できた。感謝!!

https://qiita.com/baby-0105/items/fd563733d2b6b810a4dc#:~:text=%E5%8E%9F%E5%9B%A0,-CSRF%E4%BF%9D%E8%AD%B7%E3%81%8C&text=%E3%81%93%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E6%80%92%E3%81%A3%E3%81%9F,%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A8%E8%80%83%E3%81%88%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82

“`Ruby:渡したパラメータ
Started POST “/auth

元記事を表示

Webpacker から importmap-rails に移行した

## はじめに
### きっかけ
Rails アプリで使用していた [Webpacker](https://github.com/rails/webpacker) の開発が終了し、[importmap-rails](https://github.com/rails/importmap-rails) がデフォルトになったため。

Rails7 のリリース後、今後 importmap-rails がデフォルトになることが発表され、その後、Webpacker の[開発終了が発表](https://github.com/rails/webpacker/commit/16bba5d6ca862b950a002f19c10d12e4bf51a87b)されました。また、プリコンパイルが必要な環境向けの選択肢として [jsbundling-rails](https://github.com/rails/jsbundling-rails) などが公開されました。
Rails チームは Webpacker の開発を終了しましたが、後継のプロジェクトとして [Shakapacker](https://gi

元記事を表示

アイデア総数【192】個人開発アイデアまとめ【毎日更新】

## 今月の個人開発に使えるアイデアを人気順に抽出!
## ? ターゲット
– 個人開発のアイデアが欲しい人
– 自分のプロダクトを改善していきたい人人
– シンプルに他人のアイデアが気になる人

“`
アイデアとエンジニアのマッチングアプリ ideeeの最新アイデアを投稿中!
“`
https://www.ideee.tech/about?utm_source=qiita&utm_medium=post&utm_id=auto_post

## ? ランキング(コメント)
`直近1ヶ月でコメントが盛り上がったアイデアをランキング化`
### ? 1. [チョコくれるBOT(かわいい)](https://www.ideee.tech/ideas/2105?utm_source=qiita_auto_post&utm_medium=post&utm_id=2105)
**? : 1  ? : 5**  ? : 2022 / 01 / 22
`バレンタイン`
うぇんさん  Twitter: [@wen_frt](https://twitter.com/wen_frt)

元記事を表示

【Rails 6】環境を指定してconsoleを起動する際に詰まったポイント

# はじめに
FactoryBotの挙動を確認するために`$ rails c`でコンソールを起動し`FactoryBot.create(:user)`等のコマンドを実行してもテスト用のDBに追加されなかった。
調べると、`console`コマンドにはいくつかオプションがありそこで環境を指定できることを知った。ただ実際に環境を指定してコンソールを起動したところエラーが発生したため本記事では環境の指定方法と詰まったポイント・解決方法を記録する。

#### 構成
**1. 環境の指定してコンソールを起動する方法**
**2. 詰まったポイント・解決方法**

#### 実行環境
Ruby 3.0.3
Rails 6.1.4
rspec-rails 5.0.2
factory_bot_rails 6.2.0

# 1. 環境を指定してコンソールを起動する方法
## consoleコマンド
* `console`コマンド(`c`と省略可能)でコンソールを起動することでRailsアプリケーションとやり取りすることが可能。

“`bash
$ rails c
Running via Spring

元記事を表示

Rails + Vueでwebpack command not foundと言われるエラー

### 導入

Rails + Vueを使ったアプリをサンプルで作ってみようと思った時に導入地点でハマったので備忘録に記載しておく。

### エラー内容

![Screenshot – 2022-02-06 15.27.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607264/bce5ac2c-a076-0d06-81a0-056bd9a6821b.png)

参考: [https://qiita.com/shizen-shin/items/38fd774ffc87bc8838c9](https://qiita.com/shizen-shin/items/38fd774ffc87bc8838c9)

こちらの記事を見たところcompileする必要があるとのことなので下記コマンドを入力したが、command not foundと言われてしまった。

“`ruby
$ rails webpacker:compile
“`

bin配下にwebpackは存在していたので原因がよくわからずnod

元記事を表示

Rails×Vue 「Hello Vue!」を表示させるまで

Rails×Vueで「Hello vue!」と表示させるまでのメモです

まずはrails new

“`markdown
% rails new Tasks –webpack=vue
“`

webpackのオプションにvueを指定してVue.jsを使えるようにします。

githubにリポジトリを作成し herokuにアプリをあげる予定なのでheroku creat後push。

アプリにbootstrapを使いたいので yarnでインストール。

“`markdown
yarn add bootstrap
“`

アプリのルートパスを設定していきます。controller名はhome_controllerとします。

“`markdown
rails g controller Home index
“`

Vueを使用したSPAを作成するのでページを表示するためのアクションはこの中に作成するindex アクションのみとなります。

indexアクションの作成

“`ruby
def index; end # ユーザーがアプリに訪問したときの窓口となるだけな

元記事を表示

RailsでSlackAPIを使用してワークスペースにユーザーを作成、作成したユーザーを既存のチャンネルに招待する

## この記事について
RailsでSlackAPIを使用した開発をする機会があったのでやり方のメモとして残しておきます。
画像が多めなため内容を細かく分割しています。ご了承ください。

なおこの記事は 2022/02 時点での設定方法、画面情報です。
Slackの画面に変更がある場合は随時対応が必要になるのでご注意ください。

### 動作環境
動作環境は以下になります。
gem `slack-ruby-client` は最新のバージョンではないので注意が必要です。

– OS: MacOS(11.6.2, BigSur)
– Ruby: 2.6.6
– Rails: 6.0.3.6
– slack-ruby-client: 0.16.0
– ActiveJob: 6.0.3.6
– rails-dotenv

また事前に以下の準備が必要になります。

– Slackでワークスペースを追加する
– 追加したワークスペースにチャンネルを追加

### この記事で取り上げないこと
– Slack APIを使用するための登録方法
– エラー対応

#

元記事を表示

【Rails x MySQL x Docker】の接続を理解する

Railsの環境をDockerで構築するときに都度、MySQLとの接続を確立するのに手間取るので、まとめる。

## 環境

– M1 Mac
– lima(arch: x86_64)
– MySQL:8.0
– Ruby:3.0.3
– Rails:6.1.4.4

## 留意点

MySQLにはunixソケットまたはtcpで接続できるが、ソケットだとディレクトリの権限でエラーになったりして手間なので、tcp接続についてのみ説明する。

## mysql2

RubyでMySQLに接続するためには[mysql2](https://github.com/brianmario/mysql2)を使用する。このgemは`Rails new`コマンド時に`-d mysql`を付与することでもインストールできる。

mysql2で接続を行うにはいくつかの[パラメータ](https://github.com/brianmario/mysql2/blob/master/README.md#connection-options)を設定する必要がある。

> The underlying MySQL c

元記事を表示

(Rails)モデル作成〜マイグレーションファイルの実行まで

Railsにおけるモデル作成〜マイグレーションファイルの実行までをちゃちゃっと箇条書きで記していきます。

Railsプロジェクトを作成してからの基本の流れになるので、できれば指が覚えるところまで行きたいです(笑)

①モデルを作る
例:movieモデルを作る場合

“`
$ rails g model movie
“`

もし間違えて作成した場合は

“`
$ rails d model movie
“`

で削除して再度作り直します。

↓成功すると以下のように表示されます

“`
invoke active_record
create db/migrate/20220130060030_create_movies.rb
create app/models/movie.rb
“`

これでモデルが作成できました。

次にマイグレーションファイルです。

②マイグレーションファイルを編集する

モデルを作成したときにマイグレーションファイルも一緒に作成されます。

create db/migrate/2022013006

元記事を表示

rubyでの正規表現問題の解説

rubyシルバーを勉強していくなかで、rubyの正規表現についてわからなかったので、解説していこうとおもいます。

今回は問題をもとにして、解説していこうとおもいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/73888b2b-db40-569c-ce28-830c28ad3642.png)

この問題を解く上で、必要になる知識が
➀破壊的メソッド
➁正規表現

##➀破壊的メソッド
破壊的メソッドとは、オブジェクト自体を変更してしまうメソッドのことです。
破壊的メソッドがあるなら、非破壊的メソッドもあります。
言われてもピンとこないとおもいますので、この2つを比較しながら実際にコードを見ていきましょう

“`
##非破壊的メソッド
string = ‘abcdefgh’
string.delete(‘a’)
=> “bcdefgh”
p string
=> “abcdefgh”

##破壊的メソッド
string = ‘abcdefgh’
string.de

元記事を表示

複数のテーブルを結合した上でGroup Byを使用する際に詰まったところ

## なぜこの記事を書こうと思ったか
eager_loadで結合されたテーブルに対して集合関数を使用した際に、少しつまったので記事にしました。

## 結論
eager_loadは使用しない!

## なぜ
eager_loadは他のモデルに対して、検索や並び替えを行いたい時に使用します。ですが、groupメソッドを使用するさいはエラーが発生します。

エラーの理由はeager_loadは結合した全ての列を取得してきます。しかしSQLではGROUP BYを使用したときは取得する列として指定できるのは、GROUP BYで指定したものか集合関数を使用したものになります。

## 解決方法
では、他のモデルに対して検索や並び替えを行いたい。でもgroupメソッドも使用したい。そんな時はどうすれば良いでしょうか? left_joinメソッドを使用してください!

元記事を表示

キレイなMonkeypatchを書きましょう!(Gemの内容を別のGemでMonkeypatchした話)

# RubyのMonkeypatchとは?

身近な言葉のモンキー・パンチ、ではなく、パッチですね。
MonkeypatchはRubyでクラス・モジュールを開いて、その一部・もしくは全部を書き換えるということです。
Rubyの最大の魅力点でもありながら、あまりやらない方がいいとも言われています。

実はRailsに入っているActiveSupportというものがあって、その中にはMonkeypatchがいっぱい集まっています。
Twitter上でこれがいいことかどうかについて時々炎上しています。

### Stringクラスで簡単な例

“`ruby
class String
def neko
replace “cat”
end
end
cat = “neko”
cat.neko
cat
# => “cat”

module CatHelper
def neko
replace “neko”
end
end

String.prepend CatHelper
cat = “neko”
cat.neko
cat
# => “neko”

# String

元記事を表示

三項演算子で条件式が複数あるとき

##そもそも三項演算子とは?
if文が複数行にわたるとき、一行でそれを記述できるのが三項演算子です。

“`
条件式 A ? Aがtrueのときに出力する値: Aがfalseのときに出力する値;
“`
が基本形です。実際に具体例を見ていきましょう。

“`
a = 10
a > 10 ? ‘hoge’: ‘fuga’;
=> “fuga”
“`
aには10が格納されます。これは10より大きくはないので、falseです。つまり、fugaが出力されます。

これをif文で書くとどうなるでしょうか?

“`
a = 10
if a > 10
puts ‘hoge’
else
puts ‘fuga’
end
=> “fuga”
“`
このように6行で書かれるものが、2行で書けるというのが三項演算子のスゴイところですね。

##三項演算子の条件に複数あった場合はどうすればよいのか?
以下のようなコードがあるんです。

“`
a = 条件式1 ? 条件式2 ? “A” : “B” : “C”;
“`
このとき、以下の表にまとめたものが役に立ちます。

| 条件式1 | 条

元記事を表示

(初心者向け)Railsで論理削除とはなにか解説する

# 概要
この記事ではRuby on Railsを例として「論理削除とはなんぞ」や、
というのをざっくり解説したいと思います。

## 注意
この記事の投稿者はエンジニア初心者のぺえぺえですので、
予めその点も踏まえて参考にしていただければと思います。

## 謝辞
* 株式会社X-HACKさんで[PARKLoT](https://www.park-lot.com/)というTwitterインスタントウィンサービスのバックエンド開発をお手伝いさせていただいております。本記事ではその経験で得られた知識をアウトプットしています。ありがとうございます。
* 参考にさせていただいた記事は以下の通りです。ありがとうございます。
* [SQL で理解する DB の物理削除と論理削除](https://zenn.dev/kotahashihama/articles/f9676a52bd83c9)

## 物理削除と論理削除の違い
データベースのデータを削除する機会はよくあると思います。

* ユーザーの退会処理
* コメントの削除
* mixiの恥ずかしい黒歴史記事の削除
などなど。

ここで

元記事を表示

RailsアプリをHerokuにプッシュしたときに、「Failed to install gems via Bundler.」とエラーがでた時の解決方法

# 環境
– Ruby 2.6.6
– Rails 6.0.3

# 発生したエラー
Railsで作成したアプリケーションをGitHubにプッシュした後に、Herokuへプッシュしようとしたところ、以下の通りエラーが出て、Herokuへのプッシュができませんでした。

“`
$ git push heroku master
Enumerating objects: 114, done.
Counting objects: 100% (114/114), done.
Delta compression using up to 8 threads
Compressing objects: 100% (96/96), done.
Writing objects: 100% (114/114), 147.51 KiB | 6.15 MiB/s, done.
Total 114 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Compressing source files… done.
remote: Building sourc

元記事を表示

integerを足し引きする方法【Rails】

レコードの値を足し引きするmethodを紹介します

テーブル構造

“`rb
create_table :tests do |t|
t.integer :score
end
“`

### increment(足す)

“`rb
Test.first.score
-> 50

# 50に20を足す
Test.first.increment(:score, 20)

Test.first.score
-> 70
“`

## decrement(引く)

“`rb
Test.first.score
-> 50

# 50から20引く
Test.first.decrement(:score, 20)

Test.first.score
-> 30
“`

## まとめ
足す時は`increment` 引く時は`decrement`です
便利なmethodなので使う時があったら参考にしてみてください〜

元記事を表示

【厳選】Railsで管理画面開発をする時のおすすめライブラリ集

管理画面をさくっとつくる場面が増えてきました。
その際に高頻度で使うおすすめのライブラリをまとめてみました。
なので、便利だけど管理画面に限らず使われるようなものは省略します。
正直、オススメ上位は超ド定番です。

# オススメ度: ★★★★★

## 【[ransack](https://github.com/activerecord-hackery/ransack)】 検索
検索を秒殺してくれるすぐれものです。有名すぎるので説明は不要ですが。。。
これ無しで検索をつくろうとすると、model層はかなり肥大化するのではないでしょうか。
まずは、ransackの機能で収まる範囲の検索をつくるのが吉だと思います。

https://github.com/activerecord-hackery/ransack

## 【[kaminari](https://github.com/kaminari/kaminari)】 ページネーション
ページネーションをviewも含め簡単に実装できます。
ransackを入れるなら迷わず入れておきましょう。
bootstrapなどのUIフレームワークに

元記事を表示

OTHERカテゴリの最新記事