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

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

Railsのdevice_token_authでパスワード再設定で参考にした記事

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 参考

https://footlog-blog.net/posts/20220103-the-event-of-no-redirection-by-resetting-the-password-of-devise_token_auth/

元記事を表示

React + Rails + AWS Fargate の構成を実現したい – 00 全体概要編

## 概要

現在正社員としてバックエンド + インフラをメインにWeb系エンジニアをしている。
技術力の向上を目的に個人開発を行いたいと常日頃考えているが、現時点で開発したいアプリケーションがない状況である。
このまま考えてるだけでは時間がもったいないため、まずはモダンかつ定番なWebサービス構成を作ることにした。
これにより、いざ個人開発でサービスを作りたいと思った時にアプリケーション開発に注力できるようにする。

## 自分のスキル

– 実プロジェクトではJavaScriptをメインで使用している
– TypeScriptは使っていない
– Reactはある程度読むことはできるがガリガリ書いていない

– AWSの設計・構築をメインで担当している
– ECSなどのコンテナサービスは使っていない
– CDKによるインフラコード化は経験あり
– CI/CDに関して一定の知見はある

## やりたいこと

以下技術も用いた構成を実現し、いざ個人開発でサービスを作りたいと考えた時にアプリケーション開発に注力可能とする

– 共通
– Docker

元記事を表示

【RSpec】Railsのモデルスペックでバリデーションのテストは書くべきか否か?

## はじめに:単純なバリデーションならテストコードは不要(という私見)
Railsでモデルスペックを書くとき、バリデーションのテストを書く人をよく見かけます。
たとえば以下のようなイメージです。

“`ruby
class User < ApplicationRecord validates :name, presence: true end ``` ```ruby RSpec.describe User, type: :model do # こういうテストは書く?書かない?? describe 'validation' do example 'nameは必須' do user = User.new(name: '') expect(user).to be_invalid user.name = 'Alice' expect(user).to be_valid end end end ``` 決して、バリデーションのテストを書くことが悪いことだとは言いませんが、個人的には単純なバリデーションで

元記事を表示

React + Rails + AWS Fargate の構成を実現したい – 01 バックエンド環境構築編(Docker + Rails)

# 概要

https://qiita.com/memomaruRey/items/746f9cff0ceefe8b6157

# 本記事のゴール
以下を参考にDocker + Railsの環境構築を行う。

https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2/viewer/dc751838fa3715f814dd

以下つまづいた点をメモする。

# つまづいた点
## 1. Dockerfileの修正

参考のDockerfileだとエラーが発生したので、修正

“`diff
FROM ruby:2.6.6

ENV LANG C.UTF-8
ENV TZ Asia/Tokyo

RUN mkdir /app
WORKDIR /app

ADD Gemfile /app/Gemfile
– RUN apt-get update -qq && \
– apt-get install -y build-essential \
– libpq-dev \
– sudo \
– gem install bundler:2.0.

元記事を表示

N+1問題のイメージ画像

![スクリーンショット 2022-08-21 10.35.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/8af891e4-c146-6488-7379-531b670a4e49.png)

N+1問題の説明です。1:Nというのは1ユーザーに対してN個の投稿データが存在することをさします。

![スクリーンショット 2022-08-21 10.25.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/61c96efb-1d08-f07d-a868-f12d3e294db7.png)

![スクリーンショット 2022-08-21 10.25.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/b70935c0-1141-c2ad-b83e-2a99edf9eb48.png)

![スクリ

元記事を表示

【Railsチュートリアル】リスト10.29のテストをより詳細に書いてみる

# 目的
Railsチュートリアル10.2.3章では「フレンドリーフォワーディング」について学んでいきます。
https://railstutorial.jp/chapters/updating_and_deleting_users?version=6.0#sec-friendly_forwarding
ただこの章、初学者にとって理解しにくい箇所だと思ったので自分のためにもまとめておきます。
最終的にはリスト10.29のテストをより詳細にし、ふりがなを振っていきます。

# 前提
リスト10.33まで進め、リスト10.29のテストコードがGREENになる状態にしておいてください。

# 解説
## そもそもこのテストで何をしようとしているのか?

リスト10.29にふりがなを振っていきます。

“`ruby:test/integration/users_edit_test.rb
require ‘test_helper’

class UsersEditTest < ActionDispatch::IntegrationTest # @userにfixturesで定義したmic

元記事を表示

【Rails】devise_invitableで招待メールからパスワード登録したユーザのリダイレクト先を変更する

## deviseとdevise_invitable
deviseとはRailsで作成したアプリケーションへ簡単に認証機能を実装することができるgem(ライブラリ)の一つで、devise_invitableはdeviseに招待機能を追加するgemになります。

### やりたいこと
devise_invitableで招待メールを送信

パスワード設定用の招待メールが送られてくる

パスワード設定

希望の画面にリダイレクトする (今回はこれをやりたい

### 問題点
パスワードを設定すると自動でログインしてくれるのですが、
設定後にroot_pathに遷移してしてしまう。

### ハマったところ
deviseには元来`after_sign_up_path_for`(登録後のリダイレクト先を変更できるメソッド)や
`after_sign_in_path_for`(ログイン後のリダイレクト先を変更できるメソッド)が存在しており、
招待メールからパスワードを設定したのちに自動でログイン状態になっているので同様のやり方でいけると思っていました。

* `after_sign_up_p

元記事を表示

【Rails】Signupの際のrootエラー解決

# Signupの際のrootエラー解決
form_withを使ってユーザー登録のフォームを作成し、正しいname,email,password,password_confirmation
を入力したのにも関わらず、下記のエラーが出てしまった時の原因
## ActionController::RoutingError (No route matches [POST] “/signup”):
①rootの設定が出来ていない
⇒データの作成、表示、更新、削除をリソース(Resources)として扱う
“`ruby:config/routes.rb
resources :users
“`
②form_withの引数にurlが入っている
⇒①の設定をしている場合はurl: signup_pathを削除する
“`ruby:app/controllers/users_controller.rb
<%= form_with(model: @user, url: signup_path, local: true) do |f| %>
<%= render 'shared/error

元記事を表示

【Railsチュートリアル】benchmark-ips gemで処理の実行速度を計測してみる

Railsチュートリアルの第4章に以下のような問いがあります。

>Rubyのbenchmark-ips gemを使い、ハッシュのキーを「数字」「 文字列」「シンボル」にした際のそれぞれの実行時間を測定してみましょう。
>Railsチュートリアル第4章より

4章までの復習兼ねて解いていきます。

まずbenchmark-ips gemをインストールします。
“`ruby:Gemfileへ追記
group :development, :test do
(省略)
gem ‘benchmark-ips’
end
“`
本番環境ではいらないと思うので、開発・テストのみのインストールとしました。
“`ruby:コマンド実行
$ bundle install
“`
上記コマンドだと、インストール済みのものはインストールされず追記したbenchmark-ips gemのみインストールされます。
“`ruby:実行結果

Using ansi 1.5.0 #インストール済みのgemはUsingとなっている
Fetching benchmark-i

元記事を表示

Railsのdevice_token_authでArgumentError in DeviseTokenAuth::ConfirmationsController#show

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

device_token_authのShowアクションにアクセスしたところ以下のエラーが発生した

“`
ArgumentError in DeviseTokenAuth::ConfirmationsController#show
“`

そのようなルートはないというエラーだった

# 解決方法

`/view/devise/mailer/confirmation_instructinos.html.erb`を以下に変更すると治った

“`erb:/view/devise/mailer/confirmation_instructinos.html.erb

<%= t(:welcome).capitalize + ' ' + @email %>!

<%= t '.instruction' %>

<%=# 下記の様に書かれているはずなので %>
<%

元記事を表示

【Rails】devise 管理者が他のユーザーの新規登録ができるようにする

# 【Rails】devise 管理者が他のユーザーの新規登録ができるようにする

### devise

deviseを使用してユーザー登録機能を実装した際に、管理者としてログインをし他のユーザーの新規登録ができるようにしたいとします。
しかし、そのままの状態で新規登録をしようとするとroot_pathにリダイレクトされてしまい新規作成画面に遷移できません。

## rails g devise:controllers users

本来deviseのコントローラーはGem内に記述されているため編集することはできません。
しかしdeviseのユーザー登録機能はregistrations_controller.rbで定義されているため、このファイルをどうにかしなくてはいけません。
そこで、このcontrollerをオーバーライドしてカスタマイズをしていきます。

まずはオーバーライドするためのファイルを作成します。
“`
$ rails g controller users/registrations
“`
これで編集するファイルapp/controllers/users/regi

元記事を表示

RailsでVueRouterでブラウザバックすると白い画面になる(Vueが読み込まれない)

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Vueを読み込んだページから別のページに移動して戻るボタンを押すと白い画面になってしまいVueが読み込まれなくなってしまった

# 解決方法

`application.js`に`turbolink`が設定されていることを思い出して切ることで解決した

“`js:javascript/packs/application.js
# 以下をコメントにする
// Turbolinks.start()
“`

# 参考

https://www.fuwamaki.com/article/4

元記事を表示

DockerコンテナのRailsにvuetifyをいれたがno moduleになる

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

コンテナで作成したRails環境にyanr installで`vuetify`をいれたがなぜか`no module`エラーが発生した

# 解決方法

Webpakcerのキャッシュが効いているのかインストールがうまくされていなかった
`docker-compose build –no-cache`をして`yarn install`したら読み込まれるようになった

元記事を表示

Railsのdevice_auth_tokenでActionController::InvalidAuthenticityTokenがでてしまう

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

device_auth_tokenを利用したところ`ActionController::InvalidAuthenticityToken`というエラーがでた

# 解決方法

`Application_controller.rb`に`protect_from_forgery`を追加したら200が返ってきた

# 参考

https://techtechmedia.com/invalid-authenticity-token-api/

元記事を表示

Letter Opnerでメールは送信できているが確認ができない

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

LetterOpnerでメールの送信が行われているのは確認ができているが、受信が行われていなかった

# 解決方法

ApplicationMailerを継承していないことが原因だった

“`
class TestMailer < ActionMailer::Base ↓ class TestMailer < ApplicationMailer ``` としたところメールが送られるようになった

元記事を表示

DockerのRailsコンテナがログ(logger, puts)を表示しない

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

DockerコンテナでRails環境を構築したところ`logger.debug`や`puts`を行っても標準出力が行われなかった

# 解決方法

puma.rbで標準出力が`log/puma.stdout.log`にリダイレクトしていた

“`rb:config/puma.rb
# stdout_redirect “#{app_root}/log/puma.stdout.log”, “#{app_root}/log/puma.stderr.log”, true
unless ENV.fetch(“RAILS_ENV”, “development”) == “development”
stdout_redirect “#{app_root}/log/puma.stdout.log”, “#{app_root}/log/puma.stderr.log”, true
end
“`

元記事を表示

Railsで複数選択可能なチェックボックスから受け取ったパラメータがnilになる

# はじめに

この記事は2021年1月にまとめていた「細かいつまずいたことをメモしておく(1月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

https://web-camp.io/magazine/archives/18333

https://www.tom08.net/2016-09-16-175901/

この記事を参考に複数選択可能なチェックボックスを作成した

chackboxで`multiple`をつけると配列で値を受け取れるのだが、`params.require`で値を受け取れると`nil`になってしまった

# 解決方法

以下のようにしたところ解決した

“`erb:test.html.erb

元記事を表示

【Ruby】putsの戻り値はnil

rails consoleで以下のメソッドを試したところ混乱したので、備忘録として書き留めます。

“`
$ rails c

?> def palindrome_tester(s)
?> if s == s.reverse
?> puts “palindrome”
?> else
?> puts “not palindrome”
?> end
?> end
=> :palindrome_tester

>> palindrome_tester(“racecar”)
palindrome
=> nil

>> palindrome_tester(“asdfg”)
not palindrome
=> nil
“`

上記の”=> nil”の部分が毎回出力されるのが不明だったのですが、putsは文字列を出力した後、nilを返しているだけでした。

元記事を表示

RailsからMySQLへのアクセスでAccess denied for user ‘root’がでてしまう

# はじめに

この記事は2021年1月にまとめていた「細かいつまずいたことをメモしておく(1月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

RailsコンテナからMySQLに接続しようとすると`Access denied for user root`エラーが発生

# 解決方法

`database.yml`の`username`を`root`にしたところ解決した
また`webpackerコンテナ`から`rails db:create`してエラーにもなっていた

2点を直したところ接続ができた

元記事を表示

Railsでパラメータを付与してアクセスしたときにエラーになって処理が始まらない

# はじめに

この記事は2021年11月にまとめていた「細かいつまずいたことをメモしておく(11月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

URLにauth_tokenというパラメータを付与して、アクセスする処理を行っていたのですが、なぜかエラーが発生してしまう
before_actionも動いていないようだった

エラーは以下のように出ていた

“`
ActionController::BadRequest: Invalid request parameters: Invalid encoding for parameter:
“`

# 解決方法

調べたところ日本語をパラメータとして渡していたのが原因だった
これはブラウザに起因するもので、URLのエンコードが正しくない場合に起こるそう

https://qiita.com/toshichanapp/items/7291a32b6712815ec253

試しにlocalhost:3000?auth_token=testなどでアクセスしたら問題なく動いた
to

元記事を表示

OTHERカテゴリの最新記事