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

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

【Rails】マイグレーション履歴を正しくしてみた

# はじめに
前任者が構築したRails周りを確認していたら、マイグレーション履歴がおかしいことを発見しました。

①マイグレーションファイルは存在しており、マイグレーションファイル内容もDBに反映されているが、マイグレーションファイルのステータスがdownになっている。
②マイグレーションテーブル(schema_migrations)に実行履歴がない。

何故この様な状態になったのか、どの様に運用していたのか、経緯は前任者がいなくなったので確認できませんでした。
とりあえず正しい状態にするためにやったことを備忘として残しておきます。

# 現状確認
1.マイグレーション履歴を確認
「Status」は全てdownになっていた。
以下はサンプルであり、実際の「Migration ID」や「Migration Name」から変えています。
“`
$ rails db:migrate:status

database: DB名

Status Migration ID Migration Name
—————————————-

元記事を表示

rails6でWebpacker::Manifest::MissingEntryErrorが発生した時の対処法

railsの環境構築時に詰まった箇所がありメモとして残します。
railsのバージョンを6系で固定して環境構築しようとしていました。
その時に`Webpacker::Manifest::MissingEntryError`というエラーが発生し何度か見たことがあるエラーだったため忘れないように記事に残します。

## 環境
`ruby 2.7.6`
`rails 6.1.6`

## エラー内容
railsプロジェクトを作成するときはこのコマンドです。

“`terminal
rails _6.1.6_ new myapp
“`

これでrailsのバージョンを指定してプロジェクトを作成できます。
この後ルートへのルーティングを整備してアクセスすると以下のようなエラーが発生しました。

“`
Webpacker::Manifest::MissingEntryError in Home#index
“`

## 対処方法
調べたところ`rails webpacker:install`, `rails webpacker:compile`を実行することで治ると書いてありました。
しか

元記事を表示

【Rails】Railsチュートリアルの追加機能~フォロワー通知 Vol.1~

railsチュートリアル第7版を始めて1か月の初心者です。
今回はRailsチュートリアルで作成したアプリにフォロワー通知機能を追加するための方法を説明していきたいと思います。
フォロワー通知編は今回のメーラー作成、次回の通知機能のON/OFF切替実装の全2回を予定しています。
# 目次
– [実装した機能詳細](#実装した機能詳細)
– [メール送信のためのメソッドを作成](#メール送信のためのメソッドを作成)
– [メール本文の作成](#メール本文の作成)
– [テスト用ビューの追加](#テスト用ビューの追加)
– [メーラーのテストの作成](#メーラーのテストの作成)
– [メール送信用メソッドを使う場所に追加](#メール送信用メソッドを使う場所に追加)

# 実装した機能詳細
– フォローされたらメールで通知がくる
– フォロー外された場合は通知は特になし
– メールにフォロワーを見るページのリンクなどは一切つけない
※今回は新たにrails generateすることなく実装を進める

私は以上のような最低限の機能を実装しました。

# メール送信のためのメソッドを作成

元記事を表示

viewファイルのrenderメソッドについて【虎の巻】

### 【概要】

以前Railsでフォームの作成について解説しました。(詳細は下記。)

https://qiita.com/iijima-naoya-45b/items/98e03a9d6f2252ebf47d

しかし、`form_with`とセットで使用される`render`について解説がなかったためにこちらで詳細を解説しようと思いました!
renderにも特殊な使い方があるので、少し混乱した箇所があるのですが、慣れると良いコードを書けるようになります。

こちら使い方をおさらいしておきましょう。

### 【環境】

この記事は下記の実行環境で動作確認しております。
・Rails 7.0.4
・Ruby 3.1.4

### renderとは

例に倣って、`render`を解説したいと思います。「render」とは、部分テンプレートを行うためのフレームワークとなっております。
まずは、下記をご覧ください。

“`ruby
def index
@posts = Post.all
render ’posts/index’# postsフォルダ内のi

元記事を表示

Rspec【虎の巻】

### 【概要】

今まで、COBOL言語を経験しており、始めてRspecなるものに触れた時はかなり戸惑いました。
というのも、COBOLの場合、UTやITを実施する際には、テスト仕様書やJCL、テスト用のインプットファイル作成などかなり広範囲に渡って作成する必要がありました。

しかし、Rspecではそれらを一括で記述することができてかなり、便利な機能であると知りました。
(最初見た時は気持ち悪!ってなりました。。。)

そこで今回は、Rspecの備忘録としてまとめましたので、Rspecが難しい!と思っている方でもポイントを抜粋して解説するのでよかったら見ていってください。

### 環境

この記事は下記の実行環境で動作確認しております。
・Rails 7.0.4
・Ruby 3.1.4
・Rspec 3.11
・Factorybot

### 【Rspecとは】

例に倣って、`Rspec`とは何かを見ていきましょう!
>RspecとはRubyプログラミング言語向けのテスティングフレームワークです。プログラムの動作確認やテスト自動化を行うために使用されます。RS

元記事を表示

Rails7.0でbootstrapを導入する

### Rails7.0でbootstrapを導入する
bootstrap-sass を Rails 7.0 プロジェクトに導入する手順は以下の通りです。
Rails プロジェクトの Gemfile を開きます。

Gemfile 内に以下の行を追加して、bootstrap-sass gem を導入します。

“`
gem “bootstrap-sass”, “3.4.1”
“`
ターミナルを開き、プロジェクトのルートディレクトリに移動します。

ターミナルで以下のコマンドを実行して、新しい Gem をインストールします。
“`
bundle install
“`

application.scss ファイル(通常は app/assets/stylesheets/application.scss)を作成して、以下をインポートします。
“`
@import “bootstrap-sprockets”;
@import “bootstrap”;
“`

これで bootstrap-sass gem のバージョン 3.4.1 が Rails 7.0 プロジェクトに導入されました。

元記事を表示

Rails7のAction Cableを使ったLINE風のチャット機能の実装

### はじめに

私はプログラミングの初学者です。
自分のサービスを開発する中でチャット機能を作成いたしました。
同じようなところで困っている人や学習のアウトプットのために投稿させていただきます。

### 実現したいこと

RailsでLINEのような非同期のチャット機能ををつけたいです。
付ける場所としては投稿詳細画面のところです。
もしよろしければゲストログインして触ってみてください。
##### 以下実際のアプリURL
[自分、探してます](https://www.sagashitemasu.com/)

### 使用した技術

・Rails7系で開発
・クライアントサイドの実装としてJavaScriptを使用
・データベースはPostgresql
・Bootstrapを使用
・gem device

### 作成手順
非常に分かりやすくまとめてくれている以下の記事を参考にさせていただきました。
以下をご覧になられていることを前提に説明していきます。
https://techtechmedia.com/action-cable-rails6

### 見た目
そこから私が必要

元記事を表示

pre-commit&Gitフックでフォーマッターと静的コード解析ツール、テストを実行する

## はじめに
pre-commit&Gitフックでcommit前にフォーマッターと解析ツール、テストを実行させます。
アプリケーションはマイクロサービス(Rails api × Vue)です。開発はDockerを使用します。

## 環境
MacBook Pro intel 2020
macOS ventura 13.5.1
Docker 20.10.21
Docker Desktop 4.14.0 (91374)

**バックエンド**
Rails 7.0.7
ruby 3.2.2

**フロントエンド**
Node.js 18.7.1
Vue 3.3.4
npm 9.8.1

# 実行するツール
ツール自体の具体的な解説は行いません。

#### Rails

| 機能 | ツール |
|————|———-|
| テスト | RSpec |
| 静的コード解析ツール | rubocop |

#### Vue

| 機能 | ツール |
|—————-|———-

元記事を表示

Ajaxについて【虎の巻】

### 【概要】

ajaxを初めてみた時になかなか処理について理解することができなかったので、思い出し確認の意味をこめて書いていこうと思います。

### 【環境】

この記事は下記の実行環境で動作確認しております。
・Rails 7.0.4
・Ruby 3.1.4
・gem ‘turbo-rails’

### 【補足】

・この記事を編集時点で、様々な気づきがありましたため、一部認識が異なる場合がございます。その場合は、ご指摘くださると幸いです。

### 【Ajaxとは】

例に倣って、ajaxとは。を確認していきましょう!

>Ajaxとは、AsynchronousとJavaScriptに、XMLを組み合わせて作られた造語です。先の項で紹介した非同期通信を、「JavaScriptの技術で実行すること」を指します。企業によっては、単純に「非同期通信」のことを指してAjaxと呼ぶケースもあります。AjaxはWebページに搭載されている技術ですが、このAjaxを使うことで、Webページ全体を更新することなく「一部分だけ情報を更新する」ことが可能です。Aj

元記事を表示

Form_withヘルパー【虎の巻】

### 【概要】

Railsでフォームを作成する際には、form_withヘルパーが必須知識となります。ぜひマスターして使いこなせるようになりましょう!
またセットでrenderを使用することがありますが、そちらの詳細については別紙で解説しております。

### 環境

この記事は下記の実行環境で動作確認しております。
・Rails 7.0.4
・Ruby 3.1.4

Rails5.1以前のバージョンについては割愛しますので、そちらをご使用の方は下記記事をご参照ください。

【Rails】form_forの基本の基

https://qiita.com/manbolila/items/b8336ab115f3aebacbb9

### Form_withヘルパーとは

まずは、Form_withヘルパーについて整理しておきましょう。
Form_withヘルパーとは下記のような機能を実装する手助けとなるものです。

### ・Viewファイル内で簡潔にフォームを生成することができるヘルパーを生成できます。
### ・入力値の送信先も設定できる為、コントローラへの

元記事を表示

Turbolinksの画面遷移をJS側でも使いたい

# JSでTurbolinksの画面遷移処理を呼びたい
Turbolinksを利用しているアプリケーションで、以下のように任意の要素のクリックイベントに画面遷移を設定するコードを書いていました。
当然ながら以下のコードのままではTurbolinksの画面遷移は利用できず、任意の要素をクリックしても通常の画面遷移が実行されてしまいます。

“`javascript
element.addEventListener(‘click’, (e) => {
const href = e.currentTarget.dataset.href
window.location.href = href
})
“`

Turbolinksは自動的に``リンクに対して[独自の遷移処理](https://railsguides.jp/v6.1/working_with_javascript_in_rails.html#turbolinks%E3%81%AE%E5%8B%95%E4%BD%9C%E5%8E%9F%E7%90%86)を差し込むことで画面遷移の高速化を実現してい

元記事を表示

【Rails】DeviseTokenAuthのNoMethodError (undefined method `downcase’ for nil:NilClass)対処法

## 状況
Devise Token Authの設定に以下の項目を追加したところログイン時に`NoMethodError (undefined method `downcase’ for nil:NilClass)`となりました。

“`rb:devise_token_auth.rb
DeviseTokenAuth.setup do |config|

config.headers_names = { “access-token”: “access-token”,
client: “client”,
expiry: “expiry”,
uid: “uid”,
“token-type”: “token-type” }

end
“`

## 解消法

以下のように`authorization: “authorization”`を追記することで解消しました。

“`

元記事を表示

クラスの継承(単一テーブル継承)について【虎の巻】

### 【概要】

作業時に、schemaの情報が定義されていないのにも関わらず、ActiveRecordでテーブルの情報を使用できることに疑問を感じ、調査してみると、単一テーブル継承と呼ばれる考え方が記されておりました。
下記に考え方や手順を備忘録として、残そうと思います。

### 環境

この記事は下記の実行環境で動作確認しております。
・Rails 7.0.4
・Ruby 3.1.4
### 【クラスの継承について】

まず、警鐘について確認したいと思います。

継承とはあるクラスを継承し、新たにクラスを作成することを指します。
┗例 Animalクラスを継承したdogクラスなど。(下記参考)

恩恵として、継承元の親クラス(スーパークラス)で定義された機能を子クラス(サブクラス)でも使用ができるようになります。

![スクリーンショット 2023-08-27 20.55.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/b87c2adb-6d5f-c933

元記事を表示

【Rails】Simple Calendarをカラム追加無しで実装しよう。

# はじめに
?こんにちは!Web系の企業に勤務し、地方からフルリモート勤務をしている@takakouと申します?️✨

今回は、「**Simple Calendarをカラム追加無しで、既存のモデルに実装してみよう**」というテーマで記事をシェアします!?

この記事を執筆しようと思った経緯としては、私自身が **Simple Calendar** の実装をしている記事では、なぜ新規のカラム、モデルを追加する記事しかないのか疑問に思ったからです。?

そこで、同じ疑問を持つ方の解消ができればと思い執筆しました?

記事執筆は未熟者で、至らない点もあるかと思いますが、皆さんのコメントやフィードバックをお待ちしています!??
# 目次

1. [対象者 ?](#1-対象者)
1. [動作環境 ?️](#2-動作環境)
1. [前提知識 ?](#3-前提知識)
1. [導入手順 ?](#4-導入手順)
1. [参考文献 ?](#5-参考文献)
1. [おわりに ?](#6-おわりに)

# 1. 対象者

* スクー

元記事を表示

Railsのコントローラ名を正しい複数形にしないとどうなるか?

## はじめに
kekiと申します。

Railsでコントローラの名前を入力する際、「正しい複数形にしなかった場合どうなるのか?」と素朴な疑問が湧いたので調べてみました。
結論としては「**動くが、手動で書く項目が増えてしまいデメリットしかない**」となりました。

解決には下記の質問、ならびに公式ガイドを参考にさせていただきました。

[【Rails】Controllerの命名規則について](https://teratail.com/questions/211338)

[コントローラの命名規約(公式ガイド)](https://railsguides.jp/action_controller_overview.html#%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E5%91%BD%E5%90%8D%E8%A6%8F%E5%89%87)

## 検証
propertyというモデルに対し、propertysという誤表記でコントローラ名を登録した時の挙動を調べました(正しい複数形はproperties)。

元記事を表示

【Rails/JavaScript】アクティブストレージの画像をプレビュー表示させるときに出会ったエラー

# はじめに
アクティブストレージの画像をプレビュー表示させるときに出会ったエラーについてその解決法をまとめました。

# プレビュー表示の方法
これは色々な記事でまとめてましたので[こちらの記事](https://qiita.com/study_matome/items/7831961de214c8935f09)を参照。

# 出会ったエラー
## ①Uncaught TypeError: Cannot read properties of null (reading ‘addEventListener’)at HTMLDocument.

Javaのファイル内容を以下のように書いたときにローカル環境にて確認時にコンソールに表示されたエラーです。

“`javascript
document.addEventListener(‘DOMContentLoaded’, function(){
const orderForm = document.getElementById(‘item-image’);
const previewList = docume

元記事を表示

DeviseTokenAuthでCookieを使用する方法【Rails】

## DeviseTokenAuthの設定を変更する

認証トークンの送受信にCookieを使用するために`cookie_enabled`を`true`にします。
`cookie`に関する設定は`cookie_attributes`に記述します。
設定項目については以下を参照してください。

https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

“`rb:devise_token_auth.rb
DeviseTokenAuth.setup do |config|
# …

config.cookie_enabled = true

config.cookie_attributes = {
http_only: true,
secure: true,
same_site: “None”
}

# …
end
“`

`cookie_attributes`に`expires`を設定するとサーバー起動時に設定されてしまうため、`set_cookie`の処理を変更し

元記事を表示

8.26

# 今日の日記メモ

Railsの環境作成に挑む
cmd+shift+. ホームディレクトリでのファイルを出す

https://chikinmasa.org/ruby_install/\

試した
“`
x21024xx@x21024xxnoAir ~ % echo $SHELL
/bin/zsh
x21024xx@x21024xxnoAir ~ % echo ‘eval “$(rbenv init -)”’ >> ~/.zshrc
x21024xx@x21024xxnoAir ~ % source ~/.zshrc
/Users/x21024xx/.zshrc:1: parse error near `then’
x21024xx@x21024xxnoAir ~ %
“`
なぜか echo ‘eval “$(rbenv init -)”’ >> ~/.zshrc が上手くいかない
↓ .zshenv の中身

“`
‘eval “export PATH=”/Users/x21024xx/.rbenv/shims:${PATH}” export RBENV_SHELL=z

元記事を表示

Railsで、Datetime型に対するタイムゾーン無表記+Rspecテストの記述方法

## はじめに
タスク管理アプリを作成する際、日付と時間を入力するため、datetime_fieldを使用した。
しかし、表記にすると謎の+0900が後付けされるわ、Rspecテストでこの場合どうやって入力値を打ち込むんだ? と混乱した経緯があったので、調べて試してみた。

※Railsに触り始めて1ヶ月ほどほどぐらいの健忘録みたいなものです。生優しい目でご覧ください。

## 開発環境
Rails 6.1.7.4
ruby 3.0.1

### +0900の数字は何?
UTC(協定世界時)、世界各地の標準時を決める基準。日本の標準時は、UTCより9時間進んでいるため、+0900と表示される。
datetime_fieldで取得した情報をそのまま表示すると下記のようになる。
![スクリーンショット 2023-08-21 23.12.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508102/0cb347eb-cd6a-35bb-e67b-2bfdcae2a08d.png)

正直、この状態になる

元記事を表示

webアプリをDocker化する方法

## はじめに
今回はdocker-composeで既存のrailsアプリをDocker化する方法をまとめました。
Dockerの学習がメインのためRubyやRailsに詳しくなくても実施できます!

### docker-composeとは
複数のコンテナを組み合わせて1つのアプリケーションとして構成を定義するファイルです。
`docker-compose`を使用ことで以下のメリットがあります。
1. docker run コマンドを短くすることができる
1. 複数のコンテナをまとめて起動できる
`docker run`コマンドは複数のオプションを使用する場合があるためどうしても長くなってしまいます。それをdocker-composeが解消してくれます!
※docker-composeには`docker-compose.yml`が必要です。

### 環境
以下の環境で構築してます。
“`
Rails 7.0.6
ruby 3.2.2
postgres 12
“`

### 手順
Docker化するのにRailsとpostgres2つのコンテナを立てるためdocker-comp

元記事を表示

OTHERカテゴリの最新記事