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

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

【エラー解決方法(Rails API)】 406 Not Acceptable,…is missing a template for this request format and variant

# 概要
Rails7とReactでjbuilderを使用して値を返した際に出力された406エラーを解決するための記事です。

### エラー内容
“` docker
api_1 | Completed 406 Not Acceptable in 24ms (ActiveRecord: 5.6ms | Allocations: 1086)
api_1 |
api_1 |
api_1 |
api_1 | ActionController::UnknownFormat (Api::V1::PostsController#index is missing a template for this request format and variant.
api_1 |
api_1 | request.formats: [“text/html”]
api_1 | request.variant: []):
api_1 |
“`
### ソースコード
“`posts_controller.rb
module Api
modu

元記事を表示

Action Cable+ReactでWebSocketのアプリケーションを0から作る

RailsのAction CableとReactの組み合わせでWebSocketのアプリケーションを0から作ってローカルで動作させました。

この記事では下記のチャットアプリの作った手順を紹介します。
下記の動画では、上下のブラウザでwebsocketでチャットしています。

![ezgif-1-7afa5d7957.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83424/43644227-8722-339f-9a7b-c99478de698f.gif)

# 主要ライブラリなどのバージョン

フロントエンドはReact、バックエンドはRailsを使っています。
主要なライブラリのバージョンは下記の通り。

## バックエンド

| ライブラリ | バージョン |
|:———–|:———–:|
| Ruby | 3.1.2 |
| Rails | 7.0.4 |
| Redis | 7.0.5 |
| Re

元記事を表示

【Rails】マイグレーションの変更内容の反映

# マイグレーションの状況の確認
db:migrateは、クエリを打ってデータベースを直接操作するようなことなく、migrationfileに記述された仕様の通りにデータベースのスキーマを設定できる処理のこと。
db:migrateが実行されると、migrationfileはそのバージョンに基づくIDにより管理されることになる。そのため、既存のmigrationfileの内容を変更して、再度db:migrateを実行しても、同じIDのmigrationfileによるマイグレーションが既に実行されている場合、変更内容は反映されない。

まず、現在のマイグレーションの状況を確認するため、以下のを実行する。
“`:terminal
$ rails db:migrate:status
“`
すると例えば以下のようなマイグレーションの状況が出力される。
“`
Status Migration ID Migration Name
————————————————–
up 20221016090215

元記事を表示

[Rails]URLの先頭にhttp://をつけるカスタムバリデーション

## やりたいこと

最近バックエンド側の開発では適切なバリデーションをかけることがとても重要なことがわかりました。
今回は規格以外のデータを保存できないようにするバリデーションに加えて、
データが規格以外だったらデータを規格に合うように修正して保存するバリデーションの作成の簡単に紹介したいと思います。

## 不具合事例
今回の案件としては、お客さんの入力した外部URLの先頭に`http://`及び`https://`がついてない場合、link_toメソッドだと、サービス内のPathになってしまいます。
わかりやすくローカル環境の例で説明します。

`localhost:3000/posts`ページで`link_to “yahoo”, “www.yahoo.com”`にすると
`yahooのサイト`ではなく`localhost:3000/posts/www.yahoo.com`に飛びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/3f839508-b92d-d

元記事を表示

[Rails]ルーティングのネストとは?

## 背景
Ruby on Rails にてアプリ作成の復習中に躓きましたので
こちらに備忘録として投稿いたします。

## ルーティングのネストとは?
あるコントローラーのルーティングの中に、別のコントローラーのルーティングを記述することです。

例えば、twitterのようなアプリがあったとします。
あるツイートに対して、たくさんのコメントがUPされますが、
どのツイートに対してのコメントかを判別する必要が出てきます。
それを実装するために、ルーティングをネストさせます。

## 具体的な記述の仕方
“`ruby
Rails.application.routes.draw do
resources :親となるコントローラー do
resources :子となるコントローラー
end
end
“`

“`ruby
resources :tweets do
resources :comments, only: :create
end
“`
このように記述することにより、どのツイートに対してのコメントかというルーティングが作成されます。
![ari.png

元記事を表示

画像投稿機能を改善する(プレビュー機能をつけよう)

完成した某フリマアプリに画像投稿機能の改善をしました。
プレビュー機能と、実際に見た時に画像のサイズがバラバラだったので、画像サイズを統一できるように設定しました。
“`javascript
document.addEventListener(‘DOMContentLoaded’, function(){

const itemForm = document.getElementById(‘new_item’);

const previewList = document.getElementById(‘previews’);

if (!itemForm) return null;

const fileField = document.querySelector(‘input[type=”file”][name=”item[image]”]’);

fileField.addEventListener(‘change’, function(e){

const alreadyPreview = document.querySelector(‘

元記事を表示

チェックボックスタグ機能の補足と、ページネーションを付けた場合のエラー解決

# はじめに
この記事はチェックボックスタグ機能を付けている前提で進めています。まだつけていない方は以下の記事を参考に、実装してみて下さい。
[【タグ機能完全版】 ~ Rails](https://qiita.com/MandoNarin/items/5a5610a40c66f77d6c10)

目次
1.補足(一覧ページに投稿したタグを表示する方法)
2.ページネーションを付けている場合のエラー解決

それでは、始めていきましょう。

# 1.補足(一覧ページに投稿したタグを表示する方法)
index.html.erb のeach文の中に以下の記述を追加してください。
“`erb:index.html.erb
<% @tweets.each do |t| %>
#以下を追記
<% t.tags.each do |tag| %>
<%= tag.name %>
<% end %>
#ここまで
<% end %>
“`
このように追加すれば、一覧ページに投稿したタグが表示されるはずです。もし表示されない場合やエラーが出る場合はアソシエーションやコントローラ

元記事を表示

Capistranoを使って自動デプロイする

某フリマアプリを作成した際、AWSのEC2を利用して自動デプロイするとき、ものすごく手間がかかったので備忘録。
詰まったところをかいつまんで載せる。
まず
“`ruby
adapter: mysql2
database: (アプリ名)_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
“`
をconfig/database.ymlに記載するわけですが、この記載場所は、
プロダクションのところに記述します。
例えば、
“`ruby
production:
<<: *default adapter: mysql2 database: furima-(番号)_production username: root password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
“`
といった感じに。

次につま

元記事を表示

[Rails]dependent: :destroyオプションとは

## きっかけ
アプリ作成を復習中に???となりましたので、復習として、投稿します。

## dependent: :destroyオプションとは

dependentオプションとは親モデルを削除した時に、
親モデルと関連している子モデルに対する挙動を指定するオプションです。

<例>
1つのツイートに対して5つのコメントがあるとします。
そのツイートが削除されたら、それに付随する5つのコメントも削除されるべきです。

その場合、Tweetモデル(親モデル)に関連している
Commentモデル(子モデル)のdependentオプションに、:destroyを指定します。

## 実際のコード
モデルのアソシエーションに追記します
“`ruby
class Tweet < ApplicationRecord has_many :comments, dependent: :destroy end ``` 上記記述により、 tweetsテーブルのレコードが削除された場合、 関連しているcommentsテーブルのレコードも同時にdestroyメソッドが実行され、一緒に削除されます。

元記事を表示

【Rails】content_forに関する学習メモ

## 学習背景

現職でよく`content_for`が記述されている箇所を見かけるものの、いまいちまだ理解しきれていなかったため、学習したメモを残します。

## content_forとは

content_forは個別のビューで表示させたい内容を表示するのに使用されます。 例えば、各ページでタブの内容を変えたい場合、railsアプリを作成した際のデフォルトだと、`application.html.erb`にtitleタグで 設定されているため、全ページ同じタブになってしまいます。

![application_html_erb_—_study_content.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673263/4abc8ee9-735e-caf1-9c24-7fcb6cb88d8c.png)

![StudyContent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673263/b1df7a97-42d

元記事を表示

とりあえずTOPページを出してみよう。

超初心者のための覚え書きです

まずはTOPページをブラウザに反映させるまでの手順をサクッと。
①コントローラーを作成
②アクションを定義
③ルーティング
④viewファイル作成
⑤サーバーを起動
⑥URLへアクセス

コントローラーを作成

“`
rails g controller homes
“`
コントローラーの名前は複数形で小文字で書くこと。
私はWebアプリ初作成の時、コントローラーを単数形で作成してエラー起こしました。
コントローラーは、ルーティングをもとに処理を実行して、対応する画面を表示させます。
画面に渡すデータ(インスタンス変数)を定義してくれます。

TOPアクション定義

作成したhomesコントローラーにTOPページを表示するための定義をしていきます。
“`ruby:controller/homes_controller.rb
class HomesController < ApplicationController def top end end ```

ルーティング
元記事を表示

超簡単!Railsでファビコンを設定してサイトをおしゃれにしよう

ファビコンを使って手軽にサイトをおしゃれにできたのでメモ感覚で投稿します。

# ファビコンとは?
検索したときのタブの左側にある小さなアイコンです!
手軽に作れてサイトを装飾できるのでとてもおすすめです!

# 実装
やることは2つだけ!
1 ファビコンを作成
2 HTMLファイルに記述 のみです!

# ファビコンを作成
私は以下のサイトを参照させていただきました

https://www.websiteplanet.com/ja/webtools/favicon-generator/

# HTMLファイルに記述

作成したアイコンを開発環境に保存した後に

“` application.html.erb

#省略
<%= favicon_link_tag('保存したアイコンのファイル名') %>

“`
を記述
これだけでファビコンが表示されました!
ご参考になれば幸いです。

元記事を表示

CSRFに関する学習メモ

## 学習背景

現職でRailsを使用しており、他の方が書かれたコードに`protect_from_forgery`という記述がありました。`protect_from_forgery`を調べてみると、CSRF対策のためと記載があり、そういえばCSRFってなんでしたっけ?ということで調べてみました。

## CSRFについて

CSRFについて[ウィキペディア](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%AA)で以下のように説明されています。

>CSRF脆弱性とは以下のような攻撃(CSRF攻撃)を可能にする脆弱性を指す[1]:攻撃者はブラウザなどのユーザ・クライアントを騙し、意図しないリクエスト(たとえばHTTPリクエスト)をWebサーバに送信させる。

例えば、ショッ

元記事を表示

railsのマイグレーションでスキーマを作る

# 目標
railsのマイグレーションでスキームを作れるようになる。

# マイグレーションのファイルの位置
マイグレーションはdb/migrateディレクトリに保存されます。1つのマイグレーションファイルが1つのマイグレーションクラスに対応します。

# マイグレーションの名前の形式
マイグレーションファイル名は“`YYYYMMDDHHMMSS_create_products.rb“`のような形式になります。
ファイル名の日時はマイグレーションを識別するUTCタイムスタンプであり、アンダースコアに続いてマイグレーション名が記述されます。
## マイグレーションのファイルの名前とファイル名の後半は一致する必要がある
“`マイグレーションのクラス名(CamelCase)“`は、“`ファイル名の後半(snake_case)“`と一致する必要があります。たとえば、
20080906120000_“`create_products“`.rbでは“`CreateProducts“`というクラスを定義し、20080906120001_“`add_details_to_prod

元記事を表示

Ruby 麻雀の配牌を作成する

RUbyで麻雀アプリを作成するために勉強中

まずは簡単なところから作成します。
麻雀牌34種136枚から14枚をランダムに抜き取って表示します。

# コード紹介

“`Ruby:majons_controller.rb
class MajonsController < ApplicationController def index majon_pais = ["m1", "m1", "m1", "m1", "m2", "m2", "m2", "m2", "m3", "m3", "m3", "m3", "m4", "m4", "m4", "m4", "m5", "m5", "m5", "m5", "m6", "m6", "m6", "m6", "m7", "m7", "m7", "m7", "m8", "m8", "m8", "m8", "m9", "m9", "m9", "m9", "p1", "p1", "p1", "p1", "p2", "p2", "p2", "p2", "p3", "p3", "p3", "p3", "p4", "p4", "p4"

元記事を表示

【29歳/未経験/独学】転職活動用SPAポートフォリオをご紹介します!【Nuxt.js, Rails, Docker, CircleCI, AWS ECS(Fargate), Terraform】

# はじめに

こんにちは!
Qiita記事初投稿となります。

掲題の通り、実務未経験からWeb系エンジニアへ転職するためにポートフォリオを制作しました!
まだまだ初心者レベルですが、自身の振り返りも兼ねて、簡単にご紹介できればと思います。

もし同じような境遇の方にとって何か参考になる点があれば、とても嬉しく思います!

## 経歴

簡単な自己紹介です!

– 29歳
– 大卒(文系)
– 営業2年→SE5年→現在

IT業界出身ではありますが、プログラミングによる開発業務はほぼ有りませんでした。
システムやプログラムに対する耐性が多少ある程度で、Web開発のスキルにおいてはほぼ0からのスタートでした。

また高学歴出身でもなく、学生時代は勉強は苦手なタイプで部活ばかりしてました。

# ポートフォリオ

## 概要

サービス名:**DigLive**

– [サイトURL](http://dig-live.com)
– [GitHubリポジトリ](https://github.com/takepro14/DigLive)

『DigLive』はYouTubeのお気に入りのライ

元記事を表示

【Rails,Mysql】DBの中身確認に関するメモ

# DBの中身確認
完全にメモになるので、詳細な内容の説明は割愛する。
本番環境にDockerを使ったRailsアプリのDBの中身を確認する。尚、DBはRDSを使用し、Mysqlで管理している。
まずEC2にSSH接続し、dockerをビルド、アップし直す。その上で以下を実行する。
“`:terminal
$ docker-compose exec app rails db:create
#まだDBを作成していない場合

$ docker-compose exec app rails db:migrate
“`
その上で、

“`
$ docker-compose exec app rails dbconsole
“`
ここでパスワードを聞かれるので、DBのパスワードを入力するとクエリを打てるようになる。

例えば、作成したusersデータの内容を確認したければ、“`select * from users\G“`のように実行する。また、データの仕様を確認したい時には、“`describe users“` のように実行すればよい。

# コンテナにログインしてDBを確認

元記事を表示

RailsでのRPC, REST, ドキュメント, クライアント自動生成について調べた

## GraphQL
https://github.com/rmosolgo/graphql-ruby

クエリを1回で取得できないのが悩み
コードにドキュメントを書く

### GraphQLのクライアントコードジェネレータ
https://github.com/dotansimha/graphql-code-generator

## REST + jsonapi-serializer + OpenAPI
https://github.com/jsonapi-serializer/jsonapi-serializer

Netflix製 早いらしい
OpenAPIを手書きする必要がある。
クライアントとサーバー同時開発し、最初にOpenAPIから書くならば良さそう

### OpenAPIのクライアントコードジェネレータ
https://github.com/OpenAPITools/openapi-generator

## gRPC
https://github.com/grpc/grpc/tree/master/src/ruby

webの場合、envoy proxyが必

元記事を表示

gem `puma`を6.0にアップグレードすると`capybara` の初期化で`NoMethodError: undefined method `strings’ for Puma::Events:Class`エラーが発生する問題の対処法

# 結論

`puma`を`6.0`以上で動作する場合`capybara`は`3.38.0`以上のバージョンが必要です

# 詳細

#### 1. 元々`puma`の実装で`Puma::Events`クラスは以下の2つの異なる責務を担っており責務過多だった

– ロギング
– コールバックイベントの管理

#### 2. 上記の2つをそれぞれの`class`に分離するBreaking changeが入るリファクタリングを行い`6.0`でリリース

https://github.com/puma/puma/pull/2798

#### 3. `capybara`で“Puma::Events`を参照していたが上記の変更の影響を受けてエラーが発生

“`ruby
Failure/Error: events = conf.options[:Silent] ? ::Puma::Events.strings : ::Puma::Events.stdio

NoMethodError:
undefined method `strings’ for Puma::Ev

元記事を表示

rails db:resetした時にActiveRecord::MismatchedForeignKeyと出た際の解決法

## 環境
– Ruby3系
– Rails7系
– MySQL
(SQLiteからMySQLにDBを変更しようとした際にエラーが発生した)

## エラー内容
“`terminal:terminal
rails db:reset
と実行したら↓

ActiveRecord::MismatchedForeignKey:
↑エラーが発生した
“`

## 解決法
“`terminal:terminal
rails db:migrate:reset
“`
を実行すれば、ActiveRecord::MismatchedForeignKeyが出ずに正常に動作します✅

## 原因
“`rails db:reset“`は、
1. 全テーブルdrop
1. schema.rbを元にDBを作成

します。
なので、**reference先が作られていないのに、任意のテーブルのreferenceカラムが先に作成されて、今回のエラーが発生します!**

そして、、、

“`rails db:migrate:reset“`は、
1. 全テーブルをdrop
1. migrationファ

元記事を表示

OTHERカテゴリの最新記事