Rails関連のことを調べてみた

Rails関連のことを調べてみた
目次

存在しないカラムでorderを二重にかけたかったお話

# はじめに
この記事は2023年度の振り返りです。

業務でちょっと考えた内容の備忘録です

# 問題

業務で、メッセージを既読・未読を取得する処理がありました。
既読は、既読順に配列に格納され、それを除外した残りが未読扱いとし、未読の中で作成順にソートがかけられて表示されていました。
(未読一覧の後に既読一覧が着ます)

“`ruby:一部を抜粋
read_message_ids = [5,3,2]
Message.order([Arel.sql(‘field(id, ?)’), read_message_ids])
.order(created_at: :desc)
“`
“`sql:発行されたSQL
SELECT `messages`.* FROM `messages` ORDER BY field(id, 5,3,2), `messages`.`created_at` DESC
“`

ただ、これの問題は、既読側も作成順で表示したいものの、配列順に表示されました。
配列をソートかけるのも手段の一つではあるものの、できればSQLで対応したいと思っていまし

元記事を表示

WARNING: UNPROTECTED PRIVATE KEY FILE! のエラー対処方法

# 概要
`capistrano`でデプロイを行う際に、下記のエラーが発生したので、その対処方法について記載します。

# エラー文
– `capistrano`のエラー内容
“`sh
bundle exec cap デプロイ先の環境を指定 deploy

# 入力例
# Rails環境のconfig/deploy内にあるファイル名を記載する
bundle exec cap test deploy

#  出力例
Permission denied (publickey).関連のエラーが表示される
“`
– `ssh-add`のエラー内容
“`sh
# 入力コマンド
ssh-add **************.pem

# 出力結果
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

元記事を表示

[Ruby on Rails] テストのフィクスチャの動作に関するコードを読んでみた

![READYFORアドベントカレンダー2023カバー画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674911/82959657-8786-1d95-f6cf-32ab83d9b5d9.png)

## はじめに
READYFOR でエンジニアとして働いている masaki です。
この記事は READYFOR Advent Calendar 2023 の14日目の記事になります。(投稿遅れました…🙇)

他の記事もぜひご覧ください!

https://qiita.com/advent-calendar/2023/readyfor

[Rails テスティングガイド \- Railsガイド](https://railsguides.jp/testing.html#%E3%83%95%E3%82%A3%E3%82%AF%E3%82%B9%E3%83%81%E3%83%A3%E3%81%AE%E5%8B%95%E4%BD%9C) を読んでいると以下のような記載があります。

> 1. フィ

元記事を表示

【Rails7】Maps JavaScript APIを使って投稿を地図上にピンで表示する

## 自己紹介
はじめまして、はると申します。現在はスクールに通いながら学習をしています。
今回、[スクール内のアドベントカレンダー](https://qiita.com/advent-calendar/2023/runteq)に参加し、**『初めて学んだ技術』** というテーマで記事を書きました🐥

## 概要
Google MapのAPIを利用し、地図上に投稿の一覧をピンで表示させます。
(新規投稿を作成する機能の実装は含みません)
– Maps JavaScript API
– Geocoding API

### 環境
– Ruby: 3.2.2
– Rails: 7.0.8
– esbuild

:::note warn
初学者のため、間違っている箇所や、紹介した方法よりも良い方法があるかもしれませんので、その際は教えて頂けると嬉しいです🙇
:::

## APIキーの準備
初めてGoogle Cloud Platformを使う想定で記載します。すでに登録済みの方は[使用するAPIの有効化](#使用するapiの有効化)に進んでください。

### Google Cloud

元記事を表示

コードオーナーがよくレビューする事5選

# はじめに
[Hubble Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hubble)の11日目[^1]です!
[^1]:平日のみの投稿なので15日ですが11日目の記事としています。

Hubbleでバックエンドエンジニアをしている @power3812 です。オブジェクト指向大好きマンで、神クラスを作れないかと模索の日々です:innocent:

Hubbleのバックエンドチームは[コードオーナー](https://docs.github.com/ja/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)制度を導入しており、PRを出す際にコードオーナー1人以上のapproveがないとマージすることが出来ません。
その際にJoinしたての方によく自分がレビューする内容5選を紹介しようと思います:sunglasses:

## 1. ActiveRe

元記事を表示

【Rails】入社前にやった方が良かった教材まとめ 【React】

## はじめに
現在、現場でReactとRuby on Railsを使用して開発しています。

その上で入社前に自分で読んでもらいたい教材を
紹介していきます!

## [プロを目指す人のためのRuby入門\[改訂2版\] 言語仕様からテスト駆動開発・デバッグ技法まで](https://www.amazon.co.jp/dp/4297124378)
– Rubyを使う方、全員におすすめしたい本
– 呪文のような構文もこれを読めば理解できるようになる(はず)
– 初版を買わないように注意してください!

>本書は、プログラミング言語Rubyの言語仕様や開発の現場で役立つRubyの知識を説明した本です。豊富なサンプルコードで文法を学び、例題でプログラミングの流れを体験できます。第1版(2017年11月発行)は、初心者の目線

元記事を表示

【Rails】ビットマスクを活用した、Todoアプリを作ってみませんか?

# はじめに
DMM WEBCAMPのAdvent Calendarの **15** 日目の担当することになりました、@takakouと申します🏙️✨

今回は、「**ビットマスクを活用した、Todoアプリを作ってみませんか?**」というテーマで記事をシェアします!📝

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

1. [目的 🎯](#1-目的)
1. [対象者 👨](#2-対象者)
1. [動作環境 🖥️](#3-動作環境)
1. [アプリ概要 🛠️](#4-アプリ概要)
1. [実装手順 🚀](#5-実装手順)
1. [参考文献 📚](#6-参考文献)
1. [おわりに 🎉](#7-おわりに)

# 1. 目的
最初に本記事の目的を説明しておきます。
– タスクを管理するアプリで設定する曜日指定の定業タスクの発生周期や、カレンダーアプリなどの予定の発生周期を設定するのって内部的にどんな動きをしているのか理解する。
– ビットマスク

元記事を表示

Railsで開発を行うときに考えていること

# はじめに

この記事は [VR法人HIKKY Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hikky) の14日目の記事です。
前日は [VRイベントサイト制作の振り返り2023 Nuxt3対応とWebアニメーションに寄せて](https://qiita.com/rohitotsubakura/items/938ec3d6703b4656b500) でした。

# 書くこと
普段 Rails 開発で意識していることやコーディングの仕方について基本的なことから宗教的なことまでだらだらと書き出してみる。
普段意識していないことは書かないかもしれない。
フレームワークによらず考えていることも含む。

# controller / routing
## routes.rb
member, collection 等、見通しよく整理できるメソッドが意外とある。

## データの保存失敗処理
“`ruby
def update

save!

rescue A

元記事を表示

【Rails・Next.js】devise-token-authによるログイン認証 Part2

# はじめに
今回の記事は【Rails・Next.js】devise-token-authによるログイン認証 Part2です。
Part1はこちらです。

https://qiita.com/ke_sukesakuma/items/c512af1e9b8c1eeb38e5

# deviseの日本語化

devise関連ファイルを日本語化していきます。
今回は認証URLを含んだメールの日本語化を目的としています。

“`ruby
rails g devise:i18n:locale ja
“`

“`ruby:config/application.rb
module Myapp
class Application < Rails::Application #省略 config.i18n.default_locale = :ja end end ``` # 認証メールの設定 今回は`letter-opener-web`を用いて、メール認証をしていきますがその際に送信元のドメインを定義する必要があります。 ```ruby:config/environme

元記事を表示

既存のモデルにあった画像を中間テーブルを挟んで別テーブルにしたい時のオーバーライド

# はじめに
既存の画像データを新しいテーブル構造に移行する際、あまり変更を加えずにメソッドを扱えるようにデータの整合性を保ちつつ効率的に移行する方法を考えました。CarrierWaveを使用した画像の管理を例に、中間テーブルを介して画像データを別テーブルに移行する際のオーバーライドについて説明します。

## 背景
既存の Product モデルに直接関連付けられていた画像データを、新しい ProductImage モデルに移行することを例にし、画像の参照は中間テーブル ProductImageReference を介して行われるとして進めていきます。

## 実装ステップ
ImageUploader というCarrierWaveのアップローダーを ProductImage モデルにマウントされている状態にします。
“` ruby
class ProductImage < ApplicationRecord mount_uploader :image, ImageUploader # その他の設定 end ``` - オーバーライドの実装 Product モデル内で、画像デ

元記事を表示

【Rails7】StimulusとBootstrap 5トーストでフラッシュメッセージを表示

## 概要
このガイドでは、Bootstrap 5のトースト機能とStimulusを組み合わせてRailsアプリケーションにフラッシュメッセージを表示する方法を説明します。Bootstrapのトーストは、ユーザーに重要な情報を簡潔に提示するのに適しています。Bootstrapトーストの詳細は[こちら](https://getbootstrap.jp/docs/5.3/components/toasts/)で確認できます。

## 手順

### Stimulusコントローラの作成
まず、以下のコマンドを使用してStimulusコントローラを生成します。
“`bash
./bin/rails generate stimulus toast
“`

### コントローラの実装
`app/javascript/controllers/toast_controller.js` に以下のようにコードを記述します。

“`app/javascript/controllers/toast_controller.js
import { Controller } from “@hotwired/s

元記事を表示

Ruby技術者認定試験【Silver】合格しました!勉強法やスケジュールを公開します!

## はじめに
つい一週間くらい前にRuby技術者認定試験を受験して、無事合格しました!
受験しようと思ったのが1ヶ月前くらいで、勉強期間は約1ヶ月。
勉強スケジュール等の見通しもない状態で、とりあえず先に試験に申し込んで日程を決める「テスト(日程先に決めちゃう)駆動開発(勉強法)」でなんとか合格しました。

これから受験を考えている方や、試験勉強を絶賛している方の参考になればと思い、テスト勉強でどんなことをしたのかまとめようと思います!

![study_night_boy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485238/ced2b49f-538d-0d72-3c18-893e658ce6e2.png)

## 前提
一旦ここで自分のスペックをご紹介しておきます。

“`
サーバーサイドエンジニア歴: 4年
Ruby歴: 1年半
業務でもRubyを使用している
好きな食べ物: オムライス
“`

## 結論
自分は下記の順番で勉強していきました!
不安だったので、ネット上に転がって

元記事を表示

【Ruby on Rails】使えるコマンドチートシート&VSCodeおすすめ拡張機能

# はじめに
こんにちは、エンジニア2年目の嶋田です。
まずは、この記事を開いていただきありがとうございます!

この記事は、株式会社スピードリンクジャパン Advent Calendar 2023 の14日目の記事です。

https://qiita.com/advent-calendar/2023/slj

# 目次

– [Railsの主要コマンド](#railsの主要コマンド)
– [アプリケーションのセットアップ](#アプリケーションのセットアップ)
– [コンポーネント生成コマンド](#コンポーネント生成コマンド)
– [データベース関連コマンド](#データベース関連コマンド)
– [データベーススキーマ変更コマンド](#データベーススキーマ変更コマンド)
– [Railsのコマンドライン操作](#railsのコマンドライン操作)
– [Rails開発のVSCode拡張機能](#rails開発のvscode拡張機能)

## Railsの主要コマンド

### アプリケーションのセットアップ
– 新しいRailsアプリケーションを作成しま

元記事を表示

RailsのZeitwerk化でやったこと、見落としていたこと

Railsアプリケーションで、`classic`オートローダーを使っているものがあったのですが、Rails v7からはZeitwerkしか使えなくなってしまうのでZeitwerkへ移行しました。

手順は基本的にはRailsガイドに乗っているのですが、やりながら詰まったところ等もあったので記事にまとめました。

https://railsguides.jp/classic_to_zeitwerk_howto.html

## やったこと

やったことは大きく、以下3点です。

1. autoloaderを`:zeitwerk`に変更して、`bin/rails zeitwerk:check`でエラーが出た部分を修正
2. 不要な自動読み込みを削除
3. アプリケーション起動時の自動読み込みの修正

1つ目は比較的すぐ完了しましたが、2と3については少し時間がかかった部分もありました。

### 1. autoloaderを`:zeitwerk`に変更して、`bin/rails zeitwerk:check`でエラーが出た部分を修正

`bin/rails zeitwerk:check`で

元記事を表示

【Rails + Heroku】PostgreSQLからJawsDB MySQLへ移行する

## 概要
HerokuのPostgreSQLアドオンは費用が高めです。そこで、よりコスト効率の良いMySQLのJawsDBに移行する方法を紹介します。

## ローカル環境の設定変更
主に修正するファイルは`Gemfile`と`config/database.yml`です。

### ファイルの修正手順
– **Gemfile**: `pg` gemをコメントアウトし(念のため保持)、`gem “mysql2”, “~> 0.5″`を追加します。ここで`”~> 0.5″`を指定する理由は、新規に`rails new -d mysql`で作成したプロジェクトに同じバージョンが指定されていたためです。

– **database.yml**: MySQLを使うために、新規に作成したRailsプロジェクトの設定を参考に変更します。違いはdefaultの設定だけだったのでそこだけ変更します。

変更前:
“`yaml
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV

元記事を表示

Next.jsでCSVをAPIに送るのに苦戦した

# はじめに

Next.jsからファイルをAPIにポストしようとしたのですが、調べてもすぐに解決できなかったのでまとめていきます。

# 問題

以下のようにインプットにいれたファイルを登録できるようにしました

“`ts
const [file, setFile] = useState()

const handleSubmit = async () => {

const res = await fetch(
`/api/v1/resources/mappings`,
{
method: “POST”,
body: { fle: file }
},
);
const { body } = await res.json();
setResponse({ status: res.status, body });
};
“`

そしてNext.jsのAPIでさらに外部APIを叩くようにしています

“`ts
export async function

元記事を表示

RailsエンジニアはPhoenixでもStimulusを使いたい

## はじめに

この記事は、Elixir Advent Calendar 2023 14日目となります。

https://qiita.com/advent-calendar/2023/elixir

前日13日目は、

@mnishiguchi さんで Elixir Erlang match_spec の文法 でした。

https://qiita.com/mnishiguchi/items/b597f70a186220bf6ec7

## 作るもの

今年は、Phoenix触る時間が全然なくて、ネタに困ったので、ズバリ・・・

#### PhoenixでもStimulusを使いたい

です。

いや、LiveView使えよというツッコミはご容赦いただきたく・・・

今年はRails7漬けになってて全然Phoenix使って

元記事を表示

数値が三桁区切りで表示される input タグをつくる

# `` では物足りない
`form.number_field`でレンダリングされる input タグでは次のような不満があります。
– 3桁区切りの表示をして欲しい(ことがある)
– うっかり全角数字で入力しても、入力がなかったことにしないで欲しい[^1]
[^1]:ウェブ入力欄で、「全角で(半角で)入力してください」とか、「ひらがなで(カタカナで)入力してください」とかに出会うが、お前が正規化しろよと思っている。

HTML の仕様(規格)の範疇だから自分でなんとかするしかない。なので設計方針はつぎのとおりです。

– input 欄に入力中 (focusin) は数値のみで、カンマは入力しない
– 入力は全角でも可能(使用者にできるだけ負担をかけない)
– 欄外に移ったら (focusout) 3桁区切りのカンマが入った表示にする
– POST(PATCH、PUT) の送信時 (submit) は数値を渡す

Stimulus についての概要は把握していることを前提としてます。
検証は、ruby 3.2、Rails 7.1 の環境です。

元記事を表示

Darklaunch(ダークローンチ)を導入してチーム開発を進めやすくした

[GLOBIS Advent Calendar 2023](https://qiita.com/advent-calendar/2023/globis) 14日目の記事です。

こんにちは!GLOPLA LMS開発メンバーの太田です。

開発をしていると「大きな機能の開発」をすることがあると思います。

私たちが開発しているプロダクトの開発メンバーは比較的多く、スクラムチームとして3〜4人くらいのチーム構成になるよう分かれて開発をしているため、あるチームが「大きな機能の開発」を担当することがあるのですが、開発途中の機能をメインブランチに混ぜると他チームのリリースの妨げになってしまいます。[^1]

この記事では、この困りごとを解消するためにDarklaunchを導入した話について書きます。

## Darklaunch(ダークローンチ)とはなにか
ユーザーに気づかれないよう機能をリリースし、内部でパフォーマンスの測定をしたり、動作確認を行ったりできる手法のことです。
これはいわゆるFeature Toggles(Feature Flagsとも呼ばれる)と呼ばれる機構であり、「ON」にす

元記事を表示

rubyで配列から空(諸々)を除外するメソッド

# はじめに
この記事は2023年度の振り返りです。

これは自分が知らなかったメソッドなので、備忘録としてのメモです

# いままで
過去にこの記事を見ていたこともあり、基本的にこれを利用していました

https://qiita.com/ta1kt0me@github/items/33c4d37a65b69b75ee40

“`ruby
[1, 2, nil, 3, “”, []].compact
=> [1, 2, 3, “”, []]

[1, 2, nil, 3, “”, []].compact.reject(&:blank?)
=> [1, 2, 3]
“`

# こんな便利メソッドがあった!!
“`ruby
[1, 2, nil, 3, “”, []].compact_blank
=> [1, 2, 3]
“`

https://qiita.com/SoarTec-lab/items/0c19a4eb5e17c417d165

# さいごに
rails6.1から追加されていたのに、今まで知りませんでした。
ここ最近rubocopとバトルしていて気付いたのですが、r

元記事を表示

OTHERカテゴリの最新記事