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

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

Railsのフォーム送信時のname属性の設定

Railsアプリケーションでは、フォームから送信されるデータを処理する際に、`params`オブジェクトを介してパラメータを受け取ります。しかし、このパラメータが期待される形式でない場合、データの保存が失敗することがあります。今回は、`name`属性を適切に設定し、このような問題を解決する方法について解説します。

## 問題の発生

例えば、スタッフの選択と時間帯の選択を含むフォームから`TimeTable`モデルにデータを保存しようとしたとき、以下のようなログが出力されることがあります。

“`
ActionController::ParameterMissing (param is missing or the value is empty: time_table):
“`

このエラーは、期待されるパラメータ`time_table`が送信されていない、または空であることを示しています。

## 解決策: `name`属性の適切な設定

この問題を解決するためには、フォームの各フィールドで`name`属性を正しく設定する必要があります。特に、Railsではモデルに基づいたフォ

元記事を表示

Railsのプルダウンの選択肢の動的制御

Railsアプリケーションで、あるフォームの選択肢を他のフォームの選択結果に基づいて動的に表示・非表示する方法について説明します。この記事では、予約システムにおいて、スタッフが提供可能なサービスに応じて利用可能な時間帯の選択肢をプルダウンで表示する実装を例にとります。

## ユースケース

予約システムにおいて、顧客がスタッフとサービスを選択する際、指定されたサービスがそのスタッフによって提供されていない場合、利用可能な時間帯を選択できないようにします。これにより、顧客が予約不可能な組み合わせを選択することを防ぎます。

## データモデル

この機能を実現するためには、スタッフ、サービス、そしてそれらの関連を管理するためのテーブル構造が必要です。以下に例を示します:

“`ruby
create_table “available_services”, force: :cascade do |t|
t.bigint “staff_id”, null: false
t.bigint “service_id”, null: false
t.datetime “created

元記事を表示

【個人開発】韓国コスメでスキンケアのお悩みを解決するサービスを開発しました【Next.js + Rails API】

## はじめに
初めまして![りか](https://twitter.com/__rk2530)と申します。
未経験からのWebエンジニア転職を目指して、日々学習を行っております。

今回、韓国コスメのスキンケア情報サービス「KoreCare(コリケア)」を開発しました。

## サービス名
[KoreCare](https://korecare.jp/)
お試し機能を実装しましたので、ログインせずにお試しいただくこともできます。

![korecare_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3467801/d4569a94-2097-fe7b-8b33-2daa7547fd02.png)

**▼サービスURL**
https://korecare.jp/

**▼GitHub URL**
https://github.com/rk0325/korecare

## サービス概要
韓国コスメに特化した、スキンケア情報サービスです。

具体的には、
– ユーザーの肌質やお悩みに合った

元記事を表示

【個人開発】自転車好きのための投稿サービスを開発しました

## サービス概要
### サービス名 : 「ChariLog(チャリログ)

自慢のカスタムや友人とのツーリングなどの思い出を写真・カスタムパーツ(アイテム)と共に発信できる、 **自転車というツールに特化した投稿サービス**です。

![charilog-introduction-image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745701/3753f69c-60f0-4f44-70d6-6801f83f30ae.jpeg)
【サービスURL】https://charilog.jp
【Githubリポジトリ】https://github.com/kiyosan0517/charilog

## なぜそのサービスを作ろうと思ったのか
– **自転車の楽しさを共有できる友人づくりに多少苦労した経験があったため**
=> アメリカやヨーロッパ圏などではBMXやロードレース等を中心とした自転車競技がメジャースポーツとして発展しているものの、日本においては健康志向の中年層がメインに

元記事を表示

Rails + Stimulus で動的なフォームの選択肢を実装する

この記事では、RailsでStimulusを使用して、スタッフを選択すると関連する利用可能な時間帯のプルダウンが更新される機能を実装する手順をご紹介します。

## 目的

予約システムにおいて、ユーザーがスタッフを選ぶと、そのスタッフの利用可能な時間帯がプルダウンで選択できるようにします。これには、次の技術を使用します。

– **Rails**: アプリケーションのバックエンドフレームワーク
– **Stimulus**: フロントエンドのJavaScriptフレームワーク

## ステップ 1: フォームの準備

### 予約フォームのセットアップ

まず、以下のコードを使って、予約に必要な情報を取得するためのフォームを作成します。

“`erb

<%= @reservation.customer.name %>様の予約

予約内容

希望開始日時:

<%= @reservation.date.strftime('%Y-%m-%d') %> <%= @reservation.time_slot

元記事を表示

条件に合う配列のみをプルダウンに表示する方法

Railsで関連付けられたレコードの一部だけをフォームのセレクトボックスに表示する方法を紹介します。この例では、`Company` が複数の `Staff` を持ち、`Staff` は `Schedule` と関連付けられています。特定の日に勤務している(`at_work` カラムが `true`)スタッフのみをプルダウンに表示します。

## モデルの関連付け

まず、`Company` モデルと `Staff` モデル、`Schedule` モデルの間には以下のような関連付けが定義されているとします。

“`ruby
class Company < ApplicationRecord has_many :staffs end class Staff < ApplicationRecord belongs_to :company has_many :schedules end class Schedule < ApplicationRecord belongs_to :staff end ``` ## Company モデルでのメソッド定義 特定の日に勤務し

元記事を表示

【Rails】テスト時にRuntimeError: UNIQUE constraint failedが発生する

# 結論

`test/fixture/テーブル名.yml`の**データが被っている**ことが原因でした。

`User`モデルの`email`カラムに**Unique制約を後から付与**した結果、テストデータの`email`カラムの**値が被っていた**ため制約に違反しているというエラーが出ていたみたいです。

“`diff_yaml:test/fixture/users.yaml
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
name: MyString
email: MyString

two:
name: MyString
+ email: MyString2 # 被ってなければエラーは出ない
– email: MyString
“`

## 参考

https://stackoverflow.com/questions/31095429/rails-tutorial-sqlite3constraintexcepti

元記事を表示

undefined method for ActiveRecord::Relationの解消法

Railsでのアプリケーション開発中、特にActiveRecordの関連を扱う際に、`ActiveRecord::Relation` オブジェクトに対する理解が不十分だと、思わぬエラーに遭遇することがあります。ここでは、`NoMethodError` という一般的なエラーの一例を取り上げ、その原因と解決策を解説します。

### 問題のシナリオ

以下のマイグレーションがあるとします。

“`ruby
create_table “schedules”, force: :cascade do |t|
t.bigint “staff_id”, null: false
t.date “date”, null: false
# …その他のフィールド
end

create_table “time_tables”, force: :cascade do |t|
t.bigint “schedule_id”, null: false
# …その他のフィールド
end
“`

そして、`Schedule` モデルと `TimeTable` モデルが以下のように関連付

元記事を表示

Railsのcollection_check_boxesのカスタマイズ

Railsの`collection_check_boxes`メソッドは、複数選択が可能なフォームを簡単に生成できる非常に便利なヘルパーメソッドです。デフォルトの表示ではモデルの特定の属性(例えば名前やID)のみを表示させることが多いですが、カスタマイズすることで他の情報も表示可能です。本記事では、`collection_check_boxes`メソッドにブロックを渡すことで、より詳細な情報を含めたカスタマイズを行う方法を紹介します。

### 基本的な使用法

`collection_check_boxes`メソッドの基本的な使用法は以下の通りです。

“`erb
<%= form.collection_check_boxes :attribute_name, collection, :value_method, :text_method %>
“`

– `:attribute_name` – フォームが操作する属性名。
– `collection` – チェックボックスとして表示するオブジェクトのコレクション。
– `:value_method` – コレクション内の各オブジェ

元記事を表示

Nokogiriのインストール時に発生するエラー解消方法の説明

# はじめに
`bundle update …`をすると、必ず`nokogiri`のインストールでエラーが出てしまい、アップデートできませんでした…。
今回は、その時に出たエラーの内容と解消法を説明しようと思います。

# Nokogiri とは

エラー内容の共有の前に、Nokogiriについて、簡単に説明しようと思います。

https://nokogiri.org/index.html

Nokogiriとは、DOM操作するためのRubyのGemです。
使用すると、Ruby から XML と HTML を簡単に操作できるようになります。

Rubyでスクレイピングをする際は、よく使用されると思います。

続いて、今回`bundle update …`をした際のエラーを共有します。

# エラー内容

“`shell
Installing nokogiri 1.13.10 (was 1.12.5) with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native exten

元記事を表示

PG::DatatypeMismatch: ERROR: column “foo” cannot be cast automatically to type precision

:::note warn
**注記**
この記事の投稿者は初学者であり、自身の学習の備忘録目的で記事投稿を行なっております。
情報の正確さには最大限注意をしておりますが、もし誤り等がございましたらお知らせいただけますと幸いです。
:::

ご覧いただきありがとうございます!
**Ito** と申します!
Ruby on Rails初学者です。

RailsでのWebアプリを作成中、データベースにテーブルを作成した際に、設定するデータ型を間違えてしまいました。
それ自体は「あるある」だと思うのですが、`migration`ファイルを作成してデータ型を変更しようとした際に**ほんのちょびっとだけ**ハマってしまったので備忘録として残します。

## 動作環境
開発環境
– Rails 7.1.3.2
– サーバー:localhost接続
– データベース:PostgreSQL

## エラーの詳細

### エラーメッセージ
“`
== 20240401****** ChangeLatAndLngToFloatInSpots: migrating ============

元記事を表示

オープンソースのバグで開発が止まりかけたので、コミットを積んで直してみた話

去年、eKYCを利用した本人確認機能を開発していたのですが、導入しようとしたオープンソースにバグがあり、そのままでは開発が進められない事態となりました。
この状況を打破すべく、オープンソースにコミットを積んで運良く直すことができたので、背景や解決までに至ったプロセスなどを紹介します。

# 背景

ユーザーが本人確認申請時に個人情報をeKYCへ送信した後、正しくレスポンスが返ってきた場合はユーザーをeKYCの本人確認手続き画面へ誘導する必要がありました。送信するだけであれば同期処理で良いのですが、エラーのレスポンスが返された時にその場で再送信をユーザーへ促したかったことと、レスポンスが正しく返ってきた時はその場で本人確認手続き画面へ誘導させたかったため、なるべく、ユーザーの待ち時間が発生しないように非同期処理にしなければなりませんでした。

ただし、eKYCへの同時リクエスト数が5までであっためSidekiqで制御する必要がありました。

Sidekiq単体で制御を行う場合、有料版のSidekiq Enterpriseへ切り替えなければなりませんでした。しかし、利用料金が高額なことと開

元記事を表示

Heroku環境でBypass RLSを実現する方法(activerecord-tenant-level-securityにモンキーパッチする)

Row Level Security(RLS)は、PostgreSQLが提供する機能で、接続ユーザーに対して操作できる行を制限できる機能で、1テーブルに複数の顧客データが混在するマルチテナントSaaSでは必須と言えるものです。

こういうRLSポリシーを設定すると……

“`sql
CREATE POLICY tenant_policy ON tickets
AS PERMISSIVE
FOR ALL
TO PUBLIC
USING (tenant_id::text = current_setting(‘tenant_level_security.tenant_id’)) — SELECT文等に追加される条件式
WITH CHECK (tenant_id::text = current_setting(‘tenant_level_security.tenant_id’)) — UPDATE文等に追加される条件式
“`

SELECT文のWHERE句に`tenant_id`のチェックが強制的に追加され、テナントIDの行しかクエリ結果に含まれなくなります

元記事を表示

【個人開発】起承転結でリレー小説できるアプリ「言の葉つむぎ」を作りました【Next.js×Rails】

# はじめに
はじめましてこんにちは、とぴ([@topi_log](https://qiita.com/topi_log))と申します。
オンラインプログラミングスクールにてRuby on Railsをメインに学習しつつ、自主学習としてフロントエンドも勉強しています。
3/30にリレー小説ができるアプリをリリースしたので、アプリ紹介と技術、感想をまとめさせていただきます。
こういった記事は初めてですのでお手柔らかにお願いいたします。

# 目次
1. 作成経緯
1. Webアプリ紹介
1. 技術スタック
1. こだわったところ
1. 反省点
1. 感想

# 1.作成経緯
オンラインプログラミングスクールにて文化祭のような受講生主催のイベントがあります。元々作っていたアプリの応募が間に合わないと判断し、急遽イベントのために別のミニアプリを作ることにしました。
そうして生まれたのが今回ご紹介するアプリ「言の葉つむぎ」です。
3/18に開発を開始し、3/30にリリースしたので制作期間は12日ほどです。

# 2.Webアプリ紹介
物語というバトンを繋いで1つの小説を完成させる、リレー小説を

元記事を表示

Wheneverのタイムゾーン適用

### はじめに
Railsアプリケーション開発時に、Whenever gemを使用してCronジョブをスケジューリングすることは非常に一般的です。しかし、サーバーのタイムゾーンとアプリケーションのタイムゾーン設定が異なる場合がよくあります。このような状況でWhenever gemを使用する際にタイムゾーンを適切に扱う方法について説明します。

### 基本設定の問題点
Railsアプリケーションで`config.time_zone`を設定しても、Whenever gemを使用して設定したCronジョブはこのタイムゾーン設定を自動的に認識しません。例えば、アプリケーションがAsia/Tokyoに設定されている場合、毎日9時30分にジョブをスケジューリングするためには、サーバーのタイムゾーン設定に合わせて時間を調整する必要があります。

### 対策
Whenever gemを使用する際にRailsアプリケーションのタイムゾーン設定を明示的に適用したい場合は、以下のようにTime.zone.parseメソッドを使用してタイムゾーンを処理することができます。

“`ruby
requir

元記事を表示

なぜ、Strong Parameters がいいのか

# はじめに
Railsを学習していて、
なぜ、Strong Parametersが重要なのか、マスアサインメントではなぜダメなのかを
整理したくて記事にしてます。
## この記事を読むと分かること
* Strong Parametersがどういうものか分かる
* なぜ、マスアサインメントがダメなのかが分かる
## Strong Parametersとは?
Strong Parametersは、Action ControllerのパラメータをActive Modelに
「マスアサインメント」で渡すことを良しとしない。:x:

開発者側はアップデートしたいパラメータを、
Active Controllerで明示的に指定する必要がある。

要は、Active Controllerのアクションで本当に使用したいパラメータだけを
厳密に指定してモデルに渡してあげる事でより安全だよねというお話。

## マスアサインメントではなぜ、ダメか?
まず、**「マスアサインメント」** とは、
チェックされていないパラメータをまるごとモデルに保存する行為の事を言います。

以下のコードでは「マスアサイン

元記事を表示

cloneしたリポジトリが要求するRubyバージョンが新しい時のアップグレード手順

# この記事を読んでほしい人

– rails6から7へのバージョンアップがうまくいかない人
Rubyのインストール時に`make: *** [build-ext] Error 2`のようなビルドエラーが出て、進めなくなっている人です。

– macOSで開発環境を構築している人
新しいプロジェクトを始める際や、職場や個人のプロジェクトで特定のRubyバージョンを必要としていて、それに合わせて環境をセットアップしようとしている人です。

# Ruby 3.2.0のインストールに失敗した時の対処法

Rubyの新しいバージョンのインストールは通常簡単ですが、たまに予期せぬエラーに直面することがあります。この記事では、`rbenv` を使用して Ruby 3.2.0 をインストールしようとした時に発生した問題と、その解決法について詳しく共有します。

## 問題の説明

`rbenv`を使用してRuby 3.2.0をインストールしようとすると、`make: *** [build-ext] Error 2`というエラーが発生し、インストールが失敗しました。
“`
rbenv install

元記事を表示

ECS Scheduled Tasksで複数のRakeタスクの定期実行を管理

# はじめに
EC2インスタンス上でRailsアプリを稼働していた副業先のいくつかの会社で、Rakeタスクやrails runnerコマンドを定期実行するためにwhenneverなどを利用していました。
Railsアプリをコンテナ化してECSで稼働する際、タスクの定期実行をどう管理するか改めて考える必要があったので、その一例を紹介します。
※実際に対応したのは2年前なので、今はもう少し良い方法もあるかもしれませんが、参考までに。

# 前提条件
共通する条件としては、以下のようなものがありました。
– 定期実行したいタスクだけが数個ある。
– タスク間の依存関係はなく、複雑なワークフローを組む必要はない。
– アプリがRuby on Railsで構成されており、ECS Serviceで稼働している。そこで利用されているDockerイメージを使い、Rakeタスクやrails runnerコマンドを実行したい。
– タスクの実行は15分以上かかる。

# ECS Scheduled Tasksの選定理由
前提条件のもと、なるべくシンプルな構成にすることを考えました。
ざっくりと以下のような

元記事を表示

【Rails7・Docker・Sidekiq】Sidekiq導入とメール自動送信のバックグラウンド処理の実装

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして働き始めて約1ヶ月が経過しました🐣

## 概要
RailsアプリにSidekiq(redis)を導入し、メールの自動送信の機能を追加していきます。
この記事のために、メールを10分後に送信するだけのサンプルアプリを用意しました。
完成形のコードはこちらです。

https://github.com/satou-haruka-37/sidekiq_sample

### 環境
– Docker
– Ruby 3.2.3
– Rails 7.1.3
– Importmap
– Tailwindcss、daisyUI
– PostgreSQL

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

## バックグラウンド処理とは?
Railsアプリケーションでは、ユーザーが特定の動作を行った際に「投稿する」「画面を表示させる」などのア

元記事を表示

Qiita で parallel_tests を後から入れた時にやった工夫

最近 Qiita で [parallel_tests](https://github.com/grosser/parallel_tests) による RSpec の並行実行を導入したので、どういう設定をしたかをまとめます。

## なぜ parallel_tests を導入したか

そもそもの導入のモチベーションは「CI にかかる時間と料金を減らせる」ということです。

Qiita では CI 実行に GitHub Actions を利用していますが、デフォルトのランナー (実行マシン) が CPU 2 Core になっています。(Ref: [GitHub ホステッド ランナーの概要 – GitHub Docs](https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88-%E3%83%AA%E3%83

元記事を表示

OTHERカテゴリの最新記事