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

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

Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.という警告

railsコマンドを実行するたびに下記の警告文が出てきます。

“`
# rails db:migrate
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
“`

ここではこの警告を出なくさせる方法を書いていきます。

参考:https://github.com/rubygems/rubygems/issues/5234

# 解決策
どうやらbundlerのversionを変えると出てこなくなるみたいです。

参考記事によると
Also, just to make sure there’s an easy way out of this posted here, running

“`bundle _2.3.3_ update –bundler“`

と書いてあるので、今のversi

元記事を表示

link_toとform_tagのデフォルトメソッドについて。

## 結論

“`link_to“` メソッド -> “`GET“`メソッドがデフォルト。
“`form_tag“`メソッド -> “`POST“`メソッドがデフォルト

### link_toメソッド
下記のようなroutes.rbメソッド違いの同じURLが存在する時、postメソッドのURLにリンクするためには“`{method:”post”}“`が必要です。(“`{method:”post”}“`がないと、getメソッドのパースにリンクされてしまう。)

“`routes.rb
post “posts/:id/destroy” => “…”
get “posts/:id/destroy” => “…”

“`
“`show.html.erb
<%= link_to (”destroy",”/posts/#{@post.id}/destroy),{method:"post"}) %>
“`

### form_tagメソッド
form_tagメソッドですと、“`post “posts/:id/destroy” => “…”

元記事を表示

【rails入門】javascriptを用いてリロードしてもチェックボックスの値を維持する(本題)

# やりたいこと
リロードしてもチェックボックスの値を維持する
### 実装したらこんな感じ

![F6A423F6-1560-42D2-BB05-C1124C3AB16E_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/40ce2d62-f899-5192-fced-6059f64e4d50.jpeg)

# 仕組み(ゴリ押し)
1. javascriptで全てのcheckboxのtrue/falseをリストに格納
1. そのリストを「次へ」ボタンが押されたときにコントローラに送り、保存する
1. 「次へ」ボタンを押したらリロードするので、その時にデータベースから最新のcheckbox情報が入ったレコードをviewに渡す
1. 受け取ったリストに基づいてjavascriptを用いてチェックをつけていく
# 実装
checkboxがtrueかfalse保存する用のモデル作成!
1行ずつ実行してください
“`ruby:ターミナル
rails g model Check 

元記事を表示

Mailerでmissing templateになってしまった

![スクリーンショット (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525610/951586bb-b754-8987-fa59-ba2c02f6e599.png)

https://qiita.com/ki_87/items/67f8965e8de17e95ac1c

コチラのサイトを参考にさせていただきメールの送信機能を実装しました。
ですが、上記のエラーが出てしまいました。なぜ。。。。

###### こいつは馬鹿です

いや誤字はない。どこが。。。おかしいんだ。。。

###### こいつは馬鹿です

何で!なんで!お父さん帰ってこないんだよ!!

###### ※関係ありません

答えは簡単。
彼は見落としていました。

~~~view/contact_mailer/send_mail.text.erb
===============================
<%= @mail_title %>
===============================

元記事を表示

【Docker】駆け出しエンジニアがDocker公式チュートリアルに躓きまくった件

可能な限りDocker公式が提供しているチュートリアルに沿って、Ruby on rails + MySQLの環境構築を行います。

## はじめに
こんにちわ、2022年4月よりエンジニアとして働き始めたばかりのUdai(ゆうだい)です!

今回は、Docker公式チュートリアルを行った際に大量のWorningやErrorに苦しんだので、これからチュートリアルに訪れる初学者の同士が同様に躓かないようにと思い筆を取りました。

如何せん、私はまだまだ駆け出しのエンジニアですので、本記事はDockerを知らない人や名前だけは知っているよといった初学者向けの記事となっております。そのため、粒度はかなり細かいものとなっております。

また、それでも一読してくださる寛大なシニアなエンジニアの先輩方は記事の内容に誤りがございましたら、遠慮なく指摘・訂正していただけると幸いです。

※ 注意点
– チュートリアルとデータベースが異なります。(PostgreSQLからMySQLへ変更)
– 手早く同上の環境構築を行いたい方は他の素晴らしい記事を参照してください。

## 対象
– 実際にDockerを

元記事を表示

LINE連携でngrockが使えへんやないかーい!!

# この記事について

LINE連携でローカルのサーバーを外部公開するためにngrockを使おうとしたけど使えかったので、現在代わり使っているサービスを紹介する記事。(railsでの連携)

「ngrockの使い方をメモ代わりにQiitaに掲載してよかったー」と思っていた矢先、使えなくてガッカリ。。。

https://qiita.com/ashketcham/items/c743e31f818534b828be

## ngrock
LINE公式に問い合わせている方がいっらしゃいました。

https://www.line-community.me/ja/question/5f07c0fb851f74ab9c18e8dc/ngrok%E3%81%A7%E5%A4%96%E9%83%A8%E5%85%AC%E9%96%8B%E3%81%97%E3%81%9Furl%E3%81%A7webhook%E6%A4%9C%E8%A8%BC%E3%82%92%E6%88%90%E5%8A%9F%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84

# 代わりのサービス –

元記事を表示

Railsのjsファイルで画像パスを指定するとき

## はじめに

Railsではassetsがコンパイルされるため、パスが開発環境と本番環境で異なる。Railsの場合は`asset_path`をつければよく、sassの場合も`image-url`をつければよい。

“`rb
# asset_pathをつければコンパイルされていても問題ない。
asset_path(‘assets/hoge/fuga.png’)
“`

ただ、JSで画像パスを指定する場合は`asset_path`や`image-url`のように指定できない。そのため画像パスの指定の仕方で少しハマった。

## 解決

画像ファイルのパスを`import`すれば良い。すると`fugaIcon`のパスが`pack/~~~/`とpackから始まるパスが生成される。

“`js
import fugaIcon from ‘../../../assets/images/hoge/fuga.png’;
“`

元記事を表示

【Rails】cloneしてきたアプリケーションを動かす手順【GitHub】

## はじめに
学習を始めて間もないです。
間違っていること等ございましたらお知らせください!
気をつけていますが特に用語の使い方が正しくない可能性があります。

一つ前の記事でcloneしてきたアプリ(jQuery導入済み)を、
自分の環境ではきちんと動作するまでこんな手順をふんでいますという紹介です。
(出てきたエラー内容やターミナルの指示に従っているだけなので大したことはしてません)

## 対象の方
cloneしてrails sしたらエラーが出てわからない!って方

jQueryが正常に動いてたアプリをcloneしたけど新しくcloneした方はなんだかちゃんと動かないって方向け

これはかなり限定的かと思われます!
(途中まではjQuery関係ないはず…)

## 環境
Rails: 6.1.5
Ruby: 2.6.3
Git: 2.32.0
ローカル環境: cloud9

## 簡単に手順
1. rails db:migrate
2. webpacker:install
3. webpacker:compile
4. jQuery使えるように文言足す
4. rails s
4

元記事を表示

【Git】【GitHub】コミット履歴を引き継がずgit cloneする方法 後半無駄に丁寧に解説しています

## はじめに
学習を始めたばかりです。
気をつけていますが用語などもちょこちょこ間違っているかもしれません。
色々間違ったこと等ございましたらぜひ教えて下さい!

あと、もしかしたらもっとシンプルな方法があるのでは?と思っています。
今回のやり方はものすごく遠回りをしているかもしれません。

ただ、たくさんコミット履歴を持ってるリポジトリのcloneに時間がかからない方法だそうです!◆理由は後述します。
(今の所私にそんな機会は全くありませんが笑)

### こちらのサイトをとても参考にさせいただきました!!!
[Gitで別のRepositoryにpushするときに今までのcommit履歴を残さない方法
](https://www.greptips.com/posts/1270/)

後日、自分がこの手順でRailsアプリをcloneした後に行っている手順もせっかくなので書きます。
(cloneしたアプリによって手順は変わると思いますし、そもそも大したことはしてません!webpacker:installとか基本的なやつです)
追記:[書きました!](https://qiita

元記事を表示

Rails + React + docker-compose をcapybaraで操作するのにハマった記録

初投稿です。

理解してしまえば簡単なのですが…
結構な時間ハマったので記事に残しておきます。

参考にさせていただいた記事↓ありがとうございます

https://qiita.com/ijufumi/items/badde64d530e6bade382

# 今回の目的
現在、React+Railsのアプリケーションをdocker-composeの環境で制作していまして、
E2Eテストを行うにあたって、Rails側からcapybaraとseleniumを使って操作が必要でした。

# ハマった箇所
dockerコンテナ内からホストOSのlocalhostに接続するという概念。
そもそもdockerの仕組みをよく理解して使っていなかったのが問題でした。

“`:docker-compose.yml
chrome:
image: selenium/standalone-chrome-debug:latest
ports:
– 4444:4444
– 5900:5900
“`
docker-compose.ymlに上記を追加
テスト中の様子

元記事を表示

DockerでRails(web)が立ち上がらずにExit 127と出る場合の対処法

# 経緯
`docker-compose run up`などでコンテナを起動させると、dbは立ち上がるが、Rails(web)のほうが立ち上がらず、`docker-compose ps`で起動状態を確かめると `Exit 127`と表示されました。

# 結論
`docker-compose.yml`ファイル内の文法ミス

# 原因
まず、なぜ`Exit 127`という状態になるのか考えました。
最初に、dockerで終了したコンテナのログを見てみます。
“`
xxx_db_1 docker-entrypoint.sh postgres Up 5432/tcp
xxx_web_1 entrypoint.sh bash -c rm – … Exit 127
“`
つぎに、`xxx_web_1`のログを見てみます。
“`
% docker logs xxx_web_1
bash: line 1: bin/rails: No such file or directory
“`
`bin/rails` というファイルやディレクトリがありません

元記事を表示

【Rails】loggerの出力をminitestでテストする方法

コントローラのテストをする際に、logger出力のテスト方法につまったので、備忘録として残します。他にいい方法があれば教えていただけると幸いです。

## バージョン

Rails 6.1.5

## 実装方法

適当なアクションに遷移した時にlogを吐く場面を想定します。

“`ruby
class XXXController < ApplicationController def index logger.info "通ったで" #ここを検出したい end end ``` ログの内容をテストします。 ```ruby # stubを使用するために必要 require 'minitest/mock' # 略 test 'logger.info を出力' do http_method = lambda { get staffs_path } logs = get_logs(http_method) expected_message = "通ったで" assert_log(logs,expected_message) end # 略 #

元記事を表示

【?エラー対応】Herokuデプロイ時に「Webpaker::Manifest::MissingEntryError」【javascript_pack_tag】

# ✅当方の環境
– 開発環境 : Docker
– 本番環境 : heroku
– Gemfileの内容
– ruby 2.7.5
– rails 6.1.5
– webpacker 5.0

# ✅関連キーワード
– %= javascript_pack_tag ‘application’, ‘data-turbolinks-track’: ‘reload’ %>
– Bootstrap導入したらエラーが発生
– Webpaker::Manifest::MissingEntryError
– status=500
– 「application.html.erb」でエラーが発生
– Herokuデプロイ時のエラー

# ✅エラー内容
– Herokuのログの内容(heroku logs -t -a アプリ名)※一部抜粋
“`
Started GET “/” for at 2022-04-12 07:59:45 +0000
Processing by TopController#index as HTML
Rendered top/index.html.erb wit

元記事を表示

【備忘録】Railsリレーション検索・作成総集

– ユーザー VS 性別(1:多)
– ユーザー VS スキル (多:多)

## 1:多(検索)
“`
User.find_by(sex_id: 1)
“`

## 多:多(検索)
“`
User.includes(:skills).where(user_skills: { skill_id: 1 })
“`
※user_skillsは中間テーブル

## 多:多(作成)
“`
User.new(skills: [Skill.find(1)])
“`

元記事を表示

Railsでxml, html などMIMEタイプごとに返すViewを指定する

mime typeによって返すviewを変更する方法です。

例えばxml, htmlへのレスポンスを別々に作成する場合

“`ruby:UsersController.rb
class UsersController < ApplicationController def show @user = users.find(params[:id]) respond_to do |format| # HTMLのレスポンス format.html # XMLを使う場合のレスポンス format.xml     # 指定がない場合のレスポンス     format.any end ``` html, xml それぞれに対応したテンプレートは以下のパスに作成します。 `app/views/users/show.html.erb` `app/views/users/show.xml.erb` ### MIME TYPE種類 https://developer.mozilla.org/ja/docs/Web/HTTP

元記事を表示

M1MacでGemのmysql2でエラー

# 環境
ホストOS:MacOS12.3
CPU:M1
仮想環境:docker compose
ruby: 2.7.5p203
rails: 6.1
MySQL: 8.0

# エラーメッセージ
以下は主なエラーを抜粋したものです。

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

“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
“`

“`
ld: warning: directory not found for option ‘-L/usr/local/opt/openssl/lib’
“`

“`
ld: library not found for -lzstd
“`

エラーメッセージはerror,failed,not foundあたりが原因のことが多いですね。

# 解消するためにやったこと
### MySQLインストール
新しいPCでMySQ

元記事を表示

Cloud9でRuby on Rails開発環境構築(github連携も)

**自分用メモ**

## 手順

### 1. Cloud9のセットアップ

1. AWSコンソールへログイン(アカウントを持っていない場合はアカウント作成)
2. AWSコンソールで「cloud9」で検索し、colud9のページへ移動
3. 「Create environment」を押下(オレンジ色のボタン)
4. サーバ作成
・name:任意
・description:任意・空欄で問題ない
・「next step」を押下(オレンジ色のボタン)
5. 各種設定
・デフォルトで無料枠になっているので、そのままでOK
6. 確認画面で「Create environment」を押下
7. しばらく待機すると、Cloud9の画面が開き準備完了

### 2. Railsのインストールおよびプロジェクト作成(ターミナルで下記を順番に実行)

1. 「gem install rails -v 5.2.3」 → rails5.2.3のインストール
2. 「rails -v」 → インストールができたことの確認
3. 「rails new プロジェクト名」 → プロ

元記事を表示

「Rails」+「Heroku」+「Docker」+「CircleCI」を学ぶためのおすすめの教材

# ✅こんな人におすすめ
– ローカルで「Rails」を開発したことがあり、Dockerを用いて開発してみたい方
– 「Rails」で開発したアプリを「Heroku」にデプロイしたことがあり、「CircleCI」について興味がある方
– 「Docker」も「CircleCI」も聞いたことがあり、少し勉強してみたが、いまいち理解できなかった
– あまりお金をかけず、入りだけでも理解したい方

# ✅「Docker」で「Rails」アプリを開発

# ✅「Docker」の「Rails」で開発したアプリをHerokuにデプロイ

# ✅「CircleCI」を使用して、「Docker」の「Rails」で開発したアプリを「Heroku」に自動デプロイ / 自動テスト

元記事を表示

【?エラー対応】CircleCiでの自動テスト時に、「Rails」+「Docker」環境でエラーになる【自動デプロイ】

# ✅当方の環境
– 開発環境 : Docker
– 本番環境 : heroku
– Gemfileの内容
– ruby 2.7.5
– rails 6.1.5
– webpacker 5.0

# ✅関連キーワード
– 「Docker」+「Rails」+「CircleCi」の環境
– CircleCiにおける自動テスト時にエラー(ビルド時はエラーが出ていない)
– 「bundle exec rails db:migrate」でエラーが発生している模様
– Run `bundle install` to install missing gems.
– bundle installされない

# ✅エラー内容
– CircleCiのログの内容※一部抜粋
“`
#!/bin/bash -eo pipefail
bundle exec rails db:migrate
Could not find rake-13.0.6 in any of the sources
Run `bundle install` to install missing gems.

Exited wit

元記事を表示

RailsアプリケーションでN+1問題を解決する

# N+1問題とは
N+1問題とは、1つのテーブルへのSQL発行+複数(N回)の関連テーブルへのSQL発行が発生している現象のことを示している。
つまり、データ量が増えるだけパフォーマンスが低下してしまう。また、大量のSQL発行でDBに高負荷をかけてしまう副次的な問題も発生してしまう。
###### 例えば、console上でSkillCategoryモデルから5つSkillの名前を取得してみると
“`ruby:ruby
Skill.limit(5).each do |skill|
p skill.skill_category.name
end
“`
###### 下のようにconsole上でSQL発行ログが出力される
“`sql:sql
Skill Load (0.4ms) SELECT “skills”.* FROM “skills” LIMIT ? [[“LIMIT”, 5]]
SkillCategory Load (0.2ms) SELECT “skill_categories”.* FROM “skill_categories” WHERE “skill_

元記事を表示

OTHERカテゴリの最新記事