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

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

ActionTextをカスタマイズする

## はじめ
 本記事は、Rails7、stimulusを使用した環境のもと、ActionTextをカスタマイズ(主に添付ファイルのアップロードまわり)する方法を紹介します。ActionTextは、[trix](https://github.com/basecamp/trix)を利用しており、これによってリッチテキストコンテンツと編集機能を簡単に導入することができます。デフォルトの挙動のまま使用する分には特に問題にはなりませんが、「こうしてほしい」という要望に応えるためにカスタマイズしていくためには、それなりの理解が必要であり、その前提のもと話を進めていきます。

参考
[RailsガイドのActionTextに関する記事はこちら](https://railsguides.jp/action_text_overview.html)
[ActiveStorageのAPIはこちら](https://api.rubyonrails.org/v6.0.2.1/classes/ActiveStorage/Blob.html)
[trixのイベントはこちら](https://github.com/

元記事を表示

【超簡単】Rails カレンダー導入方法 (シンプルカレンダー,simple_calendar)

## はじめに
Twitterライクのアプリを作っており、タスクや予定の管理などにカレンダーを導入したいと思った方に向けての執筆です!

公式と異なり、scaffoldなしで実装しております!
ご自身の作成中のアプリに必要箇所を取り入れてもらえればと思います!

## 完成形
日時を指定して投稿すると、カレンダー内のその日時に投稿が表示されます!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/0fdf875d-bb00-130d-fca8-357069342c72.png)

## 実装方法

まずはgemをインストールします。
gemfileに以下のコードを記入します!

“`ruby:Gemfile
gem ‘simple_calendar’, ‘~> 2.0’
“`
“`terminal:ターミナル
$ bundle install
“`

今回はカレンダーに出力したいため :start_timeカラムを新たに作成します!

“`terminal:

元記事を表示

Herokuでデプロイできずやらかしかけた話

検証環境なのですが、Herokuでデプロイができずやらかしかけた話です。
DBの更新も含んでいたため、デプロイ完了時にサービスが止まることが想定でき、お客様に止まる事と終了したら確認して欲しいとお伝えしていたため長時間お待たせすることができず焦った体験談になります。
誰かしらが同じような問題に直面した時の一助になればと思いさらします。

ざっくりとした環境
“`
Ruby 2.7系
Rail 6.1系
Node 14系
“`

## 経緯
### 問題発生まで
その日はお客様から修正依頼が来ており、社内レビューが終了したため検証環境にデプロイしようとしていました。
今回の修正ではDBのテーブルにカラムの追加があり、主要機能でその追加したカラムを参照することから、デプロイ終了後にmigrateを実行しないと主要機能が使えなくなる内容でした。

そのため、お客様に検証環境が一時期使えなくなることと終了したら確認して欲しいと連絡を入れてデプロイを開始。
デプロイはPCからのコマンドで何度も行っている作業なのでデプロイ先が検証環境なことと修正したブランチをデプロイしようとしていることを確認

元記事を表示

Rails delegate

## delegateとは
Railsにおける“`delegate“`は“`移譲する“`の意味で使われていると思われます。

delegateメソッドを使うことによって、異なるクラスに定義されているメソッドをそのオブジェクトのメソッドとして呼び出せます。
これによって、リレーションを持つクラスのインスタンスメソッドを委譲することができます。

“`user has_many posts && post belongs to use“`の場合を考えます
– **User(id: integer, name: string, age: integer)**
– **Post(id: integer, title: string, content: string)**

#### delegateを使わずにuserのnameを参照する場合
“`.rb
post = Post.first
post.user.name
“`

#### delegateを使って参照する場合
“`post.rb
class Post < ApplicationRecord

元記事を表示

Turbo リファレンス

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

# ドライブ

https://turbo.hotwired.dev/reference/drive

## Turbo.visit

“`javascript
Turbo.visit(location)
Turbo.visit(location, { action: action })
“`

指定された場所(URLまたはパスを含む文字列)へのアプリケーション訪問を指定されたアクション(`”advance”`または`”replace”`のいずれかの文字列)で実行します。

locationがクロスオリジンURLであるか指定されたルート(ルートの場所の設定を参照)の外にある場合、Turboは`window.location`を設定してページ全体の読み込みを実行します。

アクションが指定されていない場合、Turbo Driveは`”advance”`の値を想定します。

訪問を実行する前にTurbo Driveはドキュメントに対して`

元記事を表示

【ActiveRecord::PendingMigrationError】Migrations are pending.

# エラー内容
* `ActiveRecord::PendingMigrationError`というエラーが表示された。 Migrations are pendingらしい。
![ActiveRecord PendingMigrationError.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/f11db91b-b00c-34a2-3955-b35e114abc75.png)

# 解決方法
* 以下をもう1回実施したら解決した。
* `rails db:create`
* `rails db:migrate`

元記事を表示

error Your lockfile needs to be updated, but yarn was run with `–frozen-lockfile` のエラー解決方法

# エラー内容
* Herokuのデプロイ時に以下エラーが発生。`–frozen-lockfile`に問題があるのか?

“`
remote: error Your lockfile needs to be updated, but yarn was run with `–frozen-lockfile`.
remote: info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to ‘https://git.heroku.com/ajax-app-37383.git’
“`

![error Your lockfile needs to be updated, but yarn was run with `–frozen-lockfi

元記事を表示

【Ruby on Rails】indexページにitem一覧、それぞれのshowページでコメントできるようにする手順

# 概要
・2022年6月にRuby on Railsでオリジナルアプリケーションを制作した。
・トップページ(index)に品目(item)がずらりと一覧で並び、それぞれに対してコメント(review)することができるボタンを設置。ボタンをクリックすると詳細ページとして別リンクに飛ぶ。ただ、indexに大量のitemを並べ、さらにそのitemにそれぞれreviewを紐付ける方法がよくわからず苦戦したのでここにまとめる。

コメント投稿や編集機能について、githubのissueに記載したのでそのリンクを一旦貼っておくが、別途改めてここで手順をまとめたい。
同じような構造のアプリケーションを制作しようとしている方のお役に立てれば!

# 初期データの登録方法
* 初期データの一括登録方法については、以下でまとめました。
[【Ruby on Rails】seedとseed_fuの違い・CSVファイルで読み込ませる方法](https://qiita.com/Ryo-0131/items/a5662c8701aad4af9f65)

# コメント投稿機能
* 以下issueにメモ。
[コメン

元記事を表示

【Ruby on Rails】seedとseed_fuの違い・CSVファイルで読み込ませる方法

# 概要
Ruby on Railsにて、itemの初期データを大量に一括登録した。
* `seed`と`seed-fu`を使ってデータ登録を行う場合の違い
* CSVファイルで初期ファイルを作って読み込ませる方法
* CSVファイルの日本語が文字化けした場合の対処法
* herokuでのデプロイ方法

も、まとめてメモしておく。

結論、seed-fuを使った方がおすすめ。

# 前提
* ADMINによる管理者ユーザー追加も可能であるが、今回は随時データ増えるものではない前提とする。
* 映画口コミサイト・レストラン口コミサイトなどは数が可変的なのでADMINが必要と思われる
* 初期データはソースコードにベタ打ちすることも可能だが、今回はCSVファイルで一括記載したものを読み込む手段を使う。その方が中身を変えることがあるときに簡単なため。

# seed.rbを使う場合の手順
* itemの初期データを記載したCSVファイルを、`db/items.csv`に配置(命名)する。 
* rowとレコードの関連付けはそれぞれ設定してください。
“`db/seeds.rb
re

元記事を表示

NameError uninitialized constant User・コンフリクトなどの一連のエラーへの対処

# エラー内容
・`NameError uninitialized constant User` というエラーが表示された。
この後も色々エラーに出くわしたので、解決までのメモを残しておきます。

![NameError uninitialized constant User.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/731c2b98-c242-83ac-5c61-a0e0508f8057.png)

1. 以下4行目の追加したら解決した(と思っていた)

![image35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/a2e6d444-f38a-52a4-6fa7-53dc30309ab3.png)

2. ちょっと作業していると、次なるエラー`NameError in Rooms#new`が発生。
      
![NameError in Rooms#new.png](http

元記事を表示

RailsアプリにDockerを導入した②【chromeコンテナ】

## やったこと
システムテストをコンテナ上で実行するために、chromeコンテナを起動できるように設定を行った。

## 手順
1. capybaraの設定
1. docker-compose.ymlの編集
1. 動作確認

### 1. capybaraの設定
#### spec/rails_helper.rb コメント外す。
“`rb
Dir[Rails.root.join(‘spec’, ‘support’, ‘**’, ‘*.rb’)].sort.each { |f| require f }
“`
#### spec/support/capybara.rbにcapybaraの設定を書く。
– Ajaxを使った部分でテスト失敗しないように、5秒待たせる
– pumaのログを出力しない
– chrome起動時のオプションの設定
– バックグラウンドでの起動。CLIで起動する場合必須。
– docker環境によっては、クラッシュする場合があるのでサンドボックスモード解除
– ウィンドウサイズの指定
– GPUハードウェアアクセラレーションを無効に

元記事を表示

[Rails]Indexを条件を指定して並び替える

## 行いたいこと
本の一覧を条件を指定して並び替える
今回の条件
– 投稿日の新しい順
– 投稿日の古い順
– 評価の高い順

![スクリーンショット 2022-12-08 16.48.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950107/9f685859-596a-70aa-923e-fa737ae7c708.png)

## 環境
– Ruby3.1.2
– Rails6.1.7
– Bookモデル作成済み
– 評価機能作成済み(並び替えで使用しているだけなので必須ではない)

# 1.並び替える方法
`order`を用いてデータを並び替える
“`
Book.order(条件: :並び順)
Book.order(created_at: :desc) created_at:は作成日時。 :descは降順
Book.order(created_at: :asc) created_at:は作成日時。 :ascは昇順
Book.order(rating: :desc) ratingは評価

元記事を表示

RailsアプリにDockerを導入した①【webコンテナとdbコンテナ】

## やったこと
1. `Dockerfile`で、rubyイメージをベースにwebコンテナ(railsサーバー)のイメージを作成し、コンテナを起動してみた。
2. その後、`docker-compose.yml`を作成し、webコンテナとdbコンテナの2つのコンテナをまとめて起動できるようにした。

## 用語について
– __Docker Engine__: 各アプリケーションコンテナを載せている基盤部分のソフトウェア。Linuxカーネルを利用。Docker CLIを提供。

– __Docker CLI__: `docker container run`など、`docker`で始まるコマンドを提供。

– __Docker Desktop__: WindowsやMacでDockerを使うためのGUIアプリケーション。Docker EngineやLinuxカーネルが含まれているため(Docker Composeも)、Linux以外のOSでもDocker Engineを動かせる!

– __Docker Compose__: Docker CLIのコマンドをまとめて実行してくれる便

元記事を表示

Railsの自動読み込みにオリジナルの変換処理を追加する

この記事は [CAMPFIRE Advent Calendar 2022](https://qiita.com/advent-calendar/2022/campfire) 8日目の記事です。

アドベントカレンダー参加という良い機会に、ふと気になったRailsの自動読み込み(autoload)について調べてみました。

# 前提
以下の環境で検証しています
– OS: macOS
– Rubyバージョン: 2.7.6
– Railsバージョン: 7.0.4
– Railsオートローダ: Zeitwerk

また、[Railsガイド](https://railsguides.jp/autoloading_and_reloading_constants.html) の表現に基づき`autoload`を「自動読み込み」として称しています

# Railsの自動読み込み(オートロード)
Railsで利用されているオートローダはRails6以降のバージョンで変更され現在は[Zeitwerk](https://github.com/fxn/zeitwerk)というgemに任されています

Ra

元記事を表示

Hotwire勉強会ログ (2)

# はじめに

この記事では、Ruby on Rails 7を使用してフロントエンドのJavaScriptのフレームワークであるHotwireのStimulusの使用するまでの流れを追っていきます。

Stimulusは既に生成されたHTMLに対して部分的にJavaScriptを使用するケースに適したフレームワークになります。JavaScriptを使用してボタンのクリックなどの処理を作成していく際には、onclickイベントなどを
直接記述する方法からjQueryを利用するなど様々な方法があると思いますが、書き方を合わせるためにもフレームワークとしてStimulusを使うとコードの把握も行いやすく、更に便利になるのではないかと思います。

## 特徴

Stimulusの特徴としては、HTML側のタグの属性に適用するStimulusのクラス(controller: Railsとは別)や動作(action)を書いていき、同じ動作を行う箇所については再利用しやすいという点があります。特徴については、[Stimulusのドキュメント](https://stimulus.hotwired.de

元記事を表示

都知事杯オープンデータ・ハッカソン2022で最終選考に残った理由を考察してみた

## 概要

RUNTEQというプログラミングスクールに通っている有志メンバー4人(途中からRUNTEQ校長もjoin)で、東京都主催のハッカソンに参加してきました!!

チームメンバー全員ほぼ開発未経験のなか
なんと、、、

__約60チームの中でファイナルステージに進出!__

そしてファイナルステージでは

__オーディエンス賞を受賞することができました!!!!!!!!!!__:tada:

嬉しかったですね〜〜〜
__小池百合子__ 都知事とも写真が撮れました!! :sparkles:
戦略的に戦うことで、つよつよなエンジニアさんと互角に戦えることができました(はず…)

優勝までは手が届きませんでしたが、ほぼ未経験者の私たちが、オーディエンス賞を勝ち取る
までのお話をまとめてみました。

## 都知事杯オープンデータ・ハッカソン2022とは

今回私たちが参加したのは東京都庁が主催しているオープンデータハッカソンです。
ハッカソンという言葉はハック(hack)とマラソン(marathon)を合わせた混成語のことです。
簡潔にまとめると、東京都の公開しているオ

元記事を表示

Rails concern

## Rails concernとは
Railsでアプリケーションを作ると、“`controllers/concerns“`, “`models/concerns“`が自動的に生成されますがこのディレクトリを使ったことはありますか? 僕はないです。

調べてみたところ、主に
– “`共通ロジックを持つときにconcernに切り出す“`
– “`そのmodelやcontrollerとは異なるロジックである場合に切り出す“`

の2つの使い方があるのかなと思いました。

例として、メールの送信ロジックなどをあげることができます。

特定の条件(投稿数が100に達する、フォロワーが100人に達するなど)を満たした時に、メールを送信するというロジックは、複数のモデルに適用することができますし、モデルロジックとは少し異なるロジックであると考えることができます。
このような時にmoduleとしてconcernに切り出します。
切り出されたmoduleは必要とするmodelでincludeすることによって使うことができます。

## 使い方
concernの使い方としては2つあります

元記事を表示

Turbo 7: アプリケーションにTurboをインストール

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://turbo.hotwired.dev/handbook/installing

Turboは、アプリケーションの``で直接Turbo配布可能スクリプトを参照するか、Webpackなどのバンドラーを介してnpmを介してコンパイルされた形式でインストールできます。

# コンパイルされた形式で

配布可能な最新のスクリプトをGitHubリリースページからダウンロードして、ページの`