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

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

railsのform_withにおけるselectメソッドの初期値設定方法

## 概要

form_withにおけるselectメソッドの初期値の設定方法が地味に迷ったのでまとめます。

## 初期値設定方法について

初期値設定方法は大きく2つあります。

### options_for_selectを使う方法

“`ruby
# bが選択される
= f.select :hoge, options_for_select([“a”,”b”,”c”], selected: “b”)
“`

### options_for_select を使わない方法
“`ruby
# bが選択される
= f.select :hoge, [“a”,”b”,”c”], { selected: “b” }
“`

## 注意点

### 失敗例

これだと失敗する。

“`ruby
# aが選択される
= f.select :hoge, [[“a”, 1],[“b”, 2],[“c”, 3]], { selected: “b” }
“`

### 解決策

選択肢が二次元配列で渡されている場合(1つの選択肢が複数の要素を持っている場合)、最初の要素がページ上に出力され、最

元記事を表示

Ruby on railsにおけるrubocop導入

## 環境
Ruby 2.6.5
rails 6.0.0

## rubocopとは?
rubocopとはRubyのコード解析ツール。余分なスペースがあったり、インデントがずれているのをRuby Style Guidに基づいて指摘してくれる。

[rubocop 公式GitHub](‘https://github.com/rubocop/rubocop’)
## Gemfileの編集
“`ruby:Gemfile
group :development do
gem ‘rubocop’, require: false
end
“`
>- rubocopは一般的はdevelop環境でしか使わないので、`group :development do`のグループに記述する
>- require: falseになっている理由は、rubocopはスタンドアローン(外部に依存せずに扱うツール)なのでterminalから操作したいという意味でfalseとする。
(参考:[Rubocopを簡単にまとめてみた](‘https://qiita.com/yoshi_4/items/ba67b5013ee

元記事を表示

パラメータを情報を指定する方法

#前提
この記事のVS codeにインストールしたrails6.0.0を使用しています。
私のオリジナルアプリケーションを用いて、誰かの役に立つ記事になればと思います。

#結論
以下のようにクリックされた時に送られてくるパラメータを指定してみましょう。
“`
(例)
<%= link_to "北海道", prototype_path(@prototypes, prefecture_id: 2), method: :get, class: :color%>
“`

#アプリケーション概要
私は写真記録のオリジナルアプリを作成しました。
ユーザー登録をしているメンバーで日本一周の写真を記録するためのアプリケーションになります。

#詳細
ここからは少し私のオリジナルアプリの概要となります。
・トップ画面には日本地図をHTML+CSSで描いています。
・画像投稿時には、都道府県(prefecture_id)と投稿する写真を選択します。
・例えば、地図中の北海道をクリックしたときに「prefecture_id: 2」というパラーメータを送り、それに該当する画像のみをshow.html.

元記事を表示

Active Storageで添付元のレコードを削除したときに画像はどうなるのか

RailsのActive Storageを使用して画像を保存している場合に、画像を添付しているレコードを削除すると画像はどうなるのか(消えるのか、残るのか)を知りたかった。

dependent: :destroyのようなoptionがあるのかなと思ったのだけれど、
Railsガイドを読んでもよくわからなかったので少し調べてみた。

Actice Storageのソースコードをみると、どうやらデフォルトで**dependent: :purge_later**という値がセットされているみたい。

“`
def has_many_attached(name, dependent: :purge_later, service: nil, strict_loading: false)
  省略
end
“`
https://github.com/rails/rails/blob/fe8d41eda16911d2ef0e7d08bb02d16650b2dcdf/activestorage/lib/active_storage/attached/model.rb#L129

purge_la

元記事を表示

Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.を解決する話。(Mac railsコマンド等で出る)

# Calling `DidYouMean::SPELL_CHECKERS.merge!…が出た!
railsコマンドやbundleコマンドを実行すると、掲題のエラーが出る。
特にそれによって何かが使えないというわけではないが、エラー内容にある通り非推奨みたいだし、毎回これが出るのは不愉快なので、消したい思う!

# bundlerのバージョンを変えよう!

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

上記の記事によると、bundlerのバージョンをアップデートすればOKみたい。
さっそくやっていく!

“`
$ bundle -v
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
Bundler version 2.2.17
$ bun

元記事を表示

「Rails6」Active Storageを使った画像のプレビュー機能

前提条件

– ruby 2.6.8
– Rails 6.1.5
– ActiveStorageをインストール済
– slimを使用

概要

 画像を投稿する際,画像を選ぶと、画像プレビュー機能を実装してどういった画像が投稿されるか確認できるようにします。
イメージ画像を以下に添付します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/1eb93912-5f29-4e32-a80a-86de599263ea.png)

実装

画像のプレビュー機能は、ActiveStorageのメソッドではなく、Jqueryで実装します。
そのためには、Jqueryを設置する必要があります。Rails6ですので、下記のコマンドが便利ですね。

“`docker-compose run web yarn add jquery-ujs“`

では下記がコードになります。※CSSのコードは除きます。
“`ruby:posts/e

元記事を表示

🔰【初学者用】Railsエラー画面の見方とデバッグ

# はじめに
Ruby on Railsのアプリケーションのデバッグ方法を記載していきます!
Railsアプリケーションの開発中は、エラーが頻繁に起きますよね。でもエラーを解決していくことでRailsの仕組みの理解に繋がっていきます。
エラーは自身の成長をサポートする友達^^

# エラー画面の見方
まずはエラー画面の見方から
– 1行目にはエラーの概要
– 2行目にはエラー発生の予測場所
– 3行目にはエラー内容の詳細
– 4行目にはコード内のエラー発生場所
ざっくりこんな感じです。自身のエラー画面と比べてみると分かりやすいと思います!

# デバッグ
デバッグとは、プログラムの誤りを見つけて、手直しすることです。
実際にデバッグ作業を行うには`pry-rails`というGemを使用します!

## 実際にデバッグしてみましょう!
※投稿機能実装時、投稿する時にエラーが発生する場合を例とします。
まずはGemの確認から!以下のGemが導入されていることを確認してください
“`rails:Gemfile
gem `pry-rails`
“`
この`pry-rails`を導入すること

元記事を表示

【Rails6】Action Mailer お問い合わせメールを自分のGmailに送信させる方法

## 実現したいこと
この記事では、以下のような、よく見る問い合わせフォームを使ってユーザーから問い合わせがあったときに、特定のGmailに問い合わせメールが届くようにするための方法を紹介しています。

![お問い合わせフォーム 2022-05-30 21.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/1a216619-d6aa-1f9d-d844-973de54177f4.png)

## 実装環境
ruby 2.6.6
Rails 6.0.3.6

## 手順
## ①Googleアカウントでアプリパスワードを発行する。
⚠アプリパスワードを発行するアカウントは、問い合わせメールを受け取りたいGmailのアカウントがいいです。

## ②2段階認証プロセスを有効にする
2段階認証の設定の仕方
まず、下の画像のページに進み、「Googleアカウントを管理」をクリック。
![Googleアカウント 2022-05-30 22.10.00.png](https://qiita

元記事を表示

AWSのEC2へアプリをデプロイした際のThe page you were looking for doesn’t exist.というエラーについて

## はじめに
Railsで作成したアプリをAWSのEC2上にデプロイしようとした際、ブラウザ上に
The page you were looking for doesn’t exist.
You may have mistyped the address or the page may have moved.
というエラーが生じました。
自分の状況にピッタリくる参考記事が見つけられず、上記のエラーに苦しめられたためこの記事を作成しました。

## 開発環境
– ruby2.6.3
– rails6.1.4
– IDE:Cloud9

## エラー内容
railsのエラーログを確認するとActionController::RoutingError(ルーティングエラー)が/(ルートパス)へ生じている。urlへさまざまなルーティングを打ち込むと全てルーティングエラーになっている。
– アプリがgithubからpullできているか確認 → OK
– 結び付けられたサーバーがあっているか確認 → OK
– 本番環境内にルーティングがあるか確認 → OK

サーバーを落としてみようと下記コマンド

元記事を表示

動的なクラス名をつけるときに気をつけること

先日[この記事](https://qiita.com/michikun06/items/d9bbea4f62af734ba234)で動的なクラス名をつける方法を解説したが
はまりポイントがあったため、追加で書きます。
# ハマりポイント
前回の記事で解説した下記のコード、、、複数のクラス名指定ができません。
“`
class=<%= "section#{question.id}" %>
“`

例えばこのように
“`
class=<%= "section#{question.id} btn btn-default" %>
“`
書くと、“`class=”section1″ btn btn-defaul“`とレンダリングされてしまいます。

# 原因
単純なHTMLの書き方の問題です。
上記の書き方だと、レンダリングされたときに“`class= section1 btn“`となってしまうため、HTMLの性質上、一つしか読み込まれません。
ですので
“`
class=”<%= "section#{question.id} btn btn-default" %>”
“`

元記事を表示

Ruby on railsにおけるFakerの導入

## なぜFakerを使用するのか
例えばバリデーションで `uniqueness: true`を指定している場合などに、値が固有のものでは複数のテストを行う際に弾かれてしまうことが考えられるため、値をランダムに生成したいという場面が存在するため。

[Fakerの公式GitHub](‘https://github.com/faker-ruby/faker’)

## Gemfileを編集する
“`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]
gem ‘rspec-rails’, ‘~> 4.0.0’
gem ‘factory_bot_rails’
gem ‘faker’
end
“`
:::note warn
重要
`group :development, :

元記事を表示

Ruby on railsにおけるFactoryBotの導入について

## なぜFactoryBotを導入するのか
Userモデルの単体テストを例に挙げると、ユーザーを生成する際に、`user = User.new(name:’takashi’, email:’takashi@mail, password:’111111’`のように都度記述するよりも、まとめて記述してしまった方が効率的であるため

## Gemfileを編集する
“`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]
gem ‘rspec-rails’, ‘~> 4.0.0’
gem ‘factory_bot_rails’
end
“`
:::note warn
重要
group :developemnt, :test doの中に記述する
:::
## bundle ins

元記事を表示

【Rails】Rspecのカバレッジをプルリクのコメントで表示する

# 初めに

`OSS`などでよく見る`CI`での Rspec カバレッジをプルリクのコメントで表示するやり方を記事にしておきます。

## 環境

– Rails 6.1.4
– Ruby 2.7.4
– codecov 0.6.0
– simplecov 0.21.2

# 本編

今回は`CircleCI` `Codecov` `simplecov`を利用してカバレッジを取得していきます。

## Codecov の設定

1. まずは、[Codecov](https://about.codecov.io/sign-up/)にアクセスし、アカウントを作成してください。
2. リポジトリの設定ページにアクセスし、`Codecov Token`を取得します。

## CircleCI の設定

すでに`CircleCI`での Rspec が稼働している前提です。

1. `CircleCI`の環境変数の設定ページにアクセスする。
2. `CODECOV_TOKEN`の名前で先ほど取得したトークンを設定します。
3. orb を利用するので、`Organization Settings

元記事を表示

Ruby on railsにおけるRspecの導入方法

## 環境
ruby 2.6.5
rails 6.0.0

## Gemの追加
“`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]
gem ‘rspec-rails’, ‘~> 4.0.0’
end
“`
:::note warn
重要
`group :development, :test`のグループ内に記述する
:::
## bundle installを実行
“`terminal:ターミナル
% bundle install
“`
## Rspecをインストール
“`terminal:ターミナル
% rails g rspec:install
“`
## .rspecに設定を追加
“`ruby:.rspec
–require spec_helper
–f

元記事を表示

rails db:system:changeコマンドはSpring経由で実行するとinvalid optionで失敗する

# はじめに

`rails db:system:change`コマンドはRails6で追加されたコマンドです。
このコマンドにより、Railsが使用するDBをPostgreSQLやMySQL等に簡単に変更できるはずなのですが、試しに実行してみたところ、以下のようなエラーになりました。

“`
% rails db:system:change –to=postgresql
Running via Spring preloader in process 15906
invalid option: –to=postgresql
“`

調査したところ、回避方法や原因がわかったので以下に説明します。

# 回避方法

Springを無効にすることで回避できます。
SpringはRails6の場合、development環境において標準で有効になっています。
Springにはrailsやrakeコマンドの実行時間を短縮する効果がありますが、[マシンスペックの向上に対してその恩恵が少なくなったと判断され](https://github.com/rails/rails/pull/42997

元記事を表示

Ruby on railsにおけるdevise導入手順

## はじめに
初めての投稿は、Railsでユーザー管理機能を実装する際に使用するdeviseの導入方法についてまとめておこうと思う。
## 環境
ruby 2.6.5
rails 6.0.0
## Gemfileの編集

“`ruby:Gemfile
gem ‘divise’
“`
## コマンドを実行し、Gemをインストール

“`terminal:ターミナル
# Gemをインストール
% bundle install
“`
## ローカルサーバーを再起動

“`terminal:ターミナル
% rails s
“`
## deviseの設定ファイルを作成する
– deviseを使用するためには、Gemのインストール+devise専用のコマンドで設定ファイルを作成する必要がある。

“`terminal:ターミナル
% rails g devise:install
“`
成功すると以下のようなログが流れる

“`terminal:ターミナル
create config/initializers/devise.rb
create config/loc

元記事を表示

[Opensearch]Aliasを便利につけるRakeタスクを作りたい

どうも、「[病院なび](https://byoinnavi.jp/)」の開発チームメンバー甘利です。
毎日ワクワクしながら、業務に携わっています。前回に引き続きAWS Opensearch の導入について書いていこうと思います。
今回はOpensearchのAliasについて書こうと思います。

# 概要
前回の「[自社サービス「病院なび」へ AWS Opensearch を導入したい](https://qiita.com/namarin/items/533e4297f05d23f198b3)」 の続きになります。
前回はIndexを作るRakeタスクを作りましたが今回はそのIndexにAliasを付与するRakeタスクを作っていきたいと思います。

# なぜAliasを利用するのか
Aliasがなぜ必要かを説明するために、Opensearchをどのように利用するかについて説明します。
現在、ざっくりと以下みたいな構成を考えています。SQLのを永続化のために利用し、検索用のDBとしてOpensearchを利用します。
![graph1.png](https://qiita-image-

元記事を表示

【Rails】学生エンジニアの個人開発日記#02

前回の振り返りと今回やること

こんにちは、こっしーです!!

前回の #01では、”自炊が楽しくなるアプリ”を開発することに決めました。

今回は、開発するアプリのコンセプトを整理していきます。

現在の開発の進捗状況

1.コンセプト整理←今ココ!!

2.機能設計

3.画面設計

4.DB設計

5.実装

6.公開

コンセプトの整理

コンセプトの整理は、webエンジニアのポートフォリオの作り方【設計編】〜設計作業とは?サービスのコンセプトの整理〜という記事を参考にしました

元記事を表示

RailsAPI+Reactでnpmの階層を間違えて沼った話

# ブラウザのコンソールに以下のエラーが出た
“`
Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.
“`

1と2には該当していなかったので、3に当たりをつけて“npm l

元記事を表示

Herokuにdockerコンテナアプリをデプロイする

## 対象読者
– ローカル環境もしくは別のサーバー上にすでにコンテナアプリを開発済みの方
– コンテナ上で開発したアプリをHerokuにデプロイしようと考えている方

## 筆者の環境
– Rails(API)
– React
– MySQL
– docker

rails,reactはそれぞれ別のコンテナとして開発を行った.

## Herokuに登録する
Herokuに会員登録をおこなう.(長くなってしまうのでここでは省略)
後で無料のアドオンを追加する際に必要となるのでクレジットカードの登録も合わせて行う.

## HerokuCLIをインストールする
コマンドでHerokuの操作を行うため以下の手順でHerokuCLIのインストールを行いましょう
– 以下のサイトにアクセスしてHerokuCLIのダウンロードを行う
https://devcenter.heroku.com/ja/articles/heroku-cli#install-the-heroku-cli
– コンテナアプリの置いてあるディレクトリに移る
例:cd Documents/docker/rails-reac

元記事を表示

OTHERカテゴリの最新記事