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

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

Rails Ransack 複数カラムを使用した絞り込み検索の実装

検索機能を作っていると、単一のカラムだけではなく複数カラムを使った検索が必要になることがありますよね。
例えば、商品価格と送料を合計した値で絞り込みたいなど。
この記事では、RailsでRansackを使って複数カラムの合計値で絞り込み検索を実装する方法を紹介します。

# 実装の概要
## モデルにransackerを定義する
まず、Productモデルにカスタムransackerを定義します。ここでは、item_priceとshipping_priceを合計したprice_totalという仮想的なカラムを作成します。

“`ruby
class Product < ApplicationRecord ransacker :price_total do Arel.sql('(item_price + shipping_price)') end end ``` ## コントローラでの検索処理 次に、コントローラでRansackを使用して検索を実行します。以下はProductsControllerの例です。 ```ruby class ProductsControll

元記事を表示

Rails: controller層でパラメータをrequireに設定すると空配列が弾かれてしまう

# 奮闘したこと
本記事では、Railsで作成したAPIのリクエストボディに配列をトップレベルで持った時、空配列でputリクエストを送れなくなり、詰まったのでそれを解説します。

Railsの`require`メソッドは、特定のパラメータがリクエストに含まれていることを確認するために使用されます。もし指定されたキーが存在しない、**または値が空である場合**(例えば空の配列`[]`)、Railsは`ActionController::ParameterMissing`エラーを発生させます。これは、`require`がリクエストパラメータの存在とその値の**有効性**を保証するために設計されているためです。

## 空配列がnil扱いされる問題

リクエストボディのトップレベルに配列を用いると意図しない挙動が発生することがあります。具体的には、配列がnil扱いさてしまうのです。これが原因でエラーが発生します。以下は、具体例を用いて説明します。

### 例: リクエストボディのトップレベルに配列を使用する場合
リクエストボディは以下のような形です。
“`json
{
“tag_id

元記事を表示

rails7 確認画面の遷移で沼った話

問合せ画面から確認画面を表示させたかったが
沼ったので共有
rails7のこの事象についてQiitaの記事にもなかったので書いてみる

□状況
問合せ画面から確認画面へPOSTするが確認画面に遷移しない

“`
サーバーのログ
Started POST “/contacts/confirm” for ::1 at 2024-05-15 00:22:22 +0900
I, [2024-05-15T00:22:22.287217 #8971] INFO — : Processing by ContactsController#confirm as TURBO_STREAM
I, [2024-05-15T00:22:22.292437 #8971] INFO — : Completed 400 Bad Request in 5ms (ActiveRecord: 0.0ms | Allocations: 808)
E, [2024-05-15T00:22:22.294219 #8971] ERROR — :
ActionController::ParameterMiss

元記事を表示

【Rails】form_withでデータを送信する際にpostではなくgetを使った話

# はじめに
Railsで予約機能を作成していたら、データを保存しないときのform_withにはgetを使うべきかpostを使うべきか迷ったっため、HTTPメソッドについて改めて調べてみることにしました。

今回はgetを使うことにしたので、その理由とform_withからgetでデータを送信する際にURLがちょっとだけスッキリする記述方法について記録します。
私はこちらを予約機能で使用しましたが、検索機能にも使えそうです。

# 結論
### get
検索機能などによく使われる
ブックマークしたいときに使う
※今回の予約機能ではgetを使用

### post
パスワードなどの秘匿性の高い情報を送信するときに使用
IDなどをURLで指定できないようにしたいときも使える

# getとpostの違い
調べる前の私のgetへのイメージは、
* URLに内容が表示されるから重要なデータには使えない
* 複数のデータを送信するとURLが長くなって見た目が良くない
というようなざっくりしたイメージでした。

https://qiita.com/ryokky59/items/bba97cbfa

元記事を表示

ER図について②

https://qiita.com/takesiumemoto/items/42ba977332aeb4a277ee

前回の続きです。
備忘録のため、記事にします。

4.外部キーで置き換える
 以下は注文テーブルカラムになります。会員氏名というカラムがありますが、ある問題が起こる可能性があります。

![order_data.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788856/1e2081e1-333c-451a-6ed1-347d9991e616.png)
会員氏名を name:stringというデータ型で保存しているため、同姓同名の人がいた場合に識別できなくなってしまいます。

ではどのようにすればよいでしょうか。

![uniqueness.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788856/b12c2db9-e038-100b-0719-63be3f598c03.png)

注文テーブルの

元記事を表示

【+α】初学者がRailsガイドから知見を広げる(’Active Record バリデーション’編 1)

:::note warn
【記事のテーマ】
初級者&中級者向けの書籍である『[独習Ruby on Rails](https://www.shoeisha.co.jp/book/detail/9784798160689)』を基準に
初学者である自分視点で「初級者&中級者向けの書籍には載っていないが公式のドキュメントには載っている少し上級よりな内容」
を取り上げることを目的としています。
:::
***
(参考書籍)
1. [独習Ruby on Rails](https://www.shoeisha.co.jp/book/detail/9784798160689)
2. [パーフェクトRuby on Rails 【増補改訂版】](https://gihyo.jp/book/2020/978-4-297-11462-6)

(参考サイト)
1. [Railsガイド >> Active Record バリデーション](https://railsguides.jp/active_record_migrations.html)
1. [Railsドキュメント](https://rail

元記事を表示

RSpecべからず集(DSLの構築が不適切な事例あれこれ)

## はじめに:これは何?
僕がコードレビューしていて、「ん?いやいや、こんな書き方しちゃダメだよ!」と思ったコード例をまとめた記事です。

この記事でフォーカスするのはRSpecの[DSL](https://e-words.jp/w/DSL.html)を適切に構築してないケースです。

ネタが増えたらまた追記するので、気になる方はこの記事のストックをお願いします!(記事の更新時に通知欄でお知らせします)

それでは以下が本編です👇

## トップレベルのdescribeを2つ以上作らない

“`ruby
# NG
describe ‘Foo spec’ do
# …
end
describe ‘Bar spec’ do
# …
end
“`

テストコードを読む際に、読み手は「当然ファイル全体が大きなひとつのdescribeブロックになっているはず」と信じ込んでいるので、予想に反するネスト構造になっていると脳内の予想と実際の実行結果が異なって混乱します。

以下のように大きなdescribeブロックで囲んで1ファイルにつきトップレベルのdescribeが1つだけ

元記事を表示

Active Storageのファイルアクセス時に独自処理を経由させる方法(Rails v6.1.0以降)

## 経緯
Ruby on RailsのActive Storageを使用していて、ファイルアクセス時に独自処理を挟みたくなったことはありませんか?

https://railsguides.jp/active_storage_overview.html

私はあります。
そんなとき、下記の記事で同じことができそうだったので参考にしていました。

https://qiita.com/karszawa/items/c0f6316217e981d3c6a3

しかし、想定の挙動通りに処理が進まず、苦労しました。

原因としては、Railsのバージョンアップによるものでした。

参考にしていた記事で実施すると、特定のRailsバージョンでは意図通り動作しないため、
`Active Storageのファイルアクセス時に独自処理を経由させたいとき`のRailsv6.1.0以降の方法についてまとめました。

## 参考にした記事に沿って実装してみる
– `app/controllers/active_storage/`配下に、`blobs_controller.rb`を作成
– 下記の通りAct

元記事を表示

ECサイト ER図

# はじまりました
今日からはじまりました!チーム開発&ECサイト開発!
早速ER図を始めて作成したものの、難しいです…
考えるだけでは入ってこなそうなので、アウトプットしていきます!
アウトプットなので、要件定義は省略しております🙇

答えになっちゃうので念の為隠しておきます↓

全体ER図

![スクリーンショット 2024-05-13 20.16.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/131a64a1-5204-8aad-5a80-4de9f0966d2d.png)

各テーブル詳しくみていきます👁️👁️

# 管理者テーブル

ER図

![スクリーンショット 2024-05-13 20.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37

元記事を表示

Next.js14 Server ComponentでのData Fetching

Next13からstableとなったAppRouterを使い、ServerComponentでバックエンドのRailsにAPIリクエストを送る処理を実装したいと思います。

今回、チーム開発でフロントエンドにNext.js14を導入することになりました。

なるべく公式に沿って実装しようということで、AppRouterのServerComponentをフル活用する運びとなりましたが、以前作った自分のPFも、PageRouterを参考にしたためかapp/page.tsxで’use client’を使用しています。ナンテコッタ。これではせっかくのAppRouterが…。

ということで、ServerComponentの使い方を調べつつ、バックエンドのRailsにAPIリクエストを送る実装を作ってみることにしました。

## 環境
Next.js 14.1.4
Rails 7.1.3
Docker

## Server Componentをサラッとおさらい
このあたりは詳しく書かれた記事もたくさんあるので割愛
公式によると、
> AppRouterのデフォルトではサーバーコンポーネントを使

元記事を表示

ActiveAdminのアクション追加例3パターン

## はじめに

ActiveAdminで開発を進めていると独自アクションを追加したいケースがあります。
本記事ではよく使うアクションの追加例を3パターン紹介します。

### アクションとは

Railsのコントローラに記述する`#index`, `#show`, `#new`, `#create`, `#edit`, `#update`, `#destroy`などのことです。

### どのような時にアクションを追加するのか

ActiveAdminでは普段使用する7種類のアクションを用意してくれますが、例えば「全ユーザを一括で更新したい」といった処理はもちろん自分でアクションを書く必要があります。
通常のRailsコントローラならroutes.rbにmemberやcollectionを書けばよいのですが、ActiveAdminではそうはいかないので本記事を書くことにしました。

参考: [Railsガイドのmemberやcollectionの解説](https://railsguides.jp/routing.html#restful%E3%81%AA%E3%82%A2%E3%8

元記事を表示

ER図について

データベース設計について
 Rubyonrails初学者になります。備忘録のために記事を投稿します。

現在はチーム開発カリキュラムを学習しており、データベース設計という単語がでてきました。

データベース設計とは?
 どのような情報をどういった構造でデータベース化するのか設計することをデータベース設計というらしい。

データベース設計に必要なこと
 1.エンティティを洗い出す
 エンティティとはテーブルのこと。実装したい機能に従って必要なテーブルを作成する。

2.要件から情報を抜き出す
 例えば商品テーブルでいくと、商品名であったり、商品の紹介文であったり、カラムにあたる部分

 3.重複する部分は分割する
  この部分は私にとって理解が難しかった部分にあります。
注文テーブルを例にとって理解しました。
![スクリーンショット 2024-05-13 003510.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788856/511f01d5-f767-9c62-eac

元記事を表示

【Rails】form_withからhidden_fieldでデータを送る際のポイント

# はじめに
Rails6.1での予約機能の作成時に、予約を確定する前に確認画面を挟むことにしました。

その際に商品のデータを渡す方法に戸惑ったので、どのように実装したか記録しておこうと思います。

# 結論
今回私がデータをうまく渡せなかったのは、paramsの使い方をきちんと理解できていなかったことが原因でした。

ビューからform_withを使ってコントローラにデータを渡し、送られたデータをコントローラで受け取るためにはparamsを使用します。

paramsはハッシュでデータが格納されるので、キーが必要になります。
私はこちらの認識が抜けていました。

“`ruby:
customer = Customer.find_by(email: params[:customer][:email])
“`
form_withから@​customerでmodelを指定して送ったデータを受け取るには、上記のようにキー[:customer]が必要になります。

# createまでitem_idを渡す方法を考える
今回私がやりたかったのは、
商品詳細(show)から予約

元記事を表示

[Codespace] railsサーバー再起動方法

## 対象
GitHubのCodespaceを使って開発している方

## 前提
codespaceを立ち上げた状態でターミナルのコマンドで再起動します

## 手順
1. 起動中のプロセスIDを確認する
入力コマンド ※「$ 」はターミナルを意味するので入力は不要です
$ cat /workspaces/[リポジトリ名]/tmp/pids/server.pid
-> xxxxx(数字)
2. サーバーを停止する
$ kill -9 xxxxx ←手順1で取得したプロセスID
3. 再度サーバーを立ち上げる
$ rails server

元記事を表示

file_fieldのデザインを変更する

### きっかけ
file_fieldのデザインをデフォルトのものから変更したいと思いましたが、
UIkitでは単数のfile_fieldのclassは用意されているものの、
複数用のfile_fieldは用意されていなかったので、
自分で変更する方法を調べて変更してみました。

初学者のため、誤りがありましたらご指導いただけると幸いです。

### 環境
Rails7.1
UIkit
ActiveStorage
stimulus

前提として
すでにmodelやdb等は作成してあるとして進めさせていただきます。

### 完成系のイメージ
送信ボタンにはUIkitのデザインをあててます。
![スクリーンショット 2024-05-11 14.06.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624777/43b74c9b-30ee-d72a-c07f-0f0ab5220e00.png)

file選択ボタンの部分をデフォルトから
![スクリーンショット 2024-05-11 14.08.53.

元記事を表示

【rails】Herokuに画像が表示されない

# はじめに

– `assets/images/logo.jpeg` に画像を保存し,imgタグにてパスを参照してブラウザ表示を試みた。
– 上記ローカル環境にて表示することはできたが、“heroku“にデプロイした環境では表示させることができなかった。

# やったこと

– 拡張子が `jpeg` になっていた→ `jpg` に修正する。
– `img` タグで記述を `image_tag` に修正する。
– `assets/images/x_logo.jpg` で絶対パス指定していたものを、 `x_logo.jpg` の形で相対パスに変更する。
– 修正後のコード↓

“`ruby
.login
.text-center
= image_tag ‘x_logo.jpg’ ,alt: ” ,width: ’60’ ,height: ’57’
h3.text-center サインアップ

“`

# 結果

– 開発環境、Heroku本番環境の両方でアイコンの画像を表示させることができた。

# 参考

https://qiita.com/jnchito/

元記事を表示

【rails】viewの共通applicationを切り分ける

# やりたいこと

– deviseを用いたログイン、サインアップ画面と通常のメイン画面とで、共通のviewを切り分けて表示させたい。
– (例)メニューヘッダー,サイドバーはログイン画面には表示させたくない

# やったこと

1. ユーザー認証用のHTMLを作る

2. ApplicationControllerに描画の切替を制御する記述をする

ユーザー認証用のHTML(ファイル名は任意)のファイル名で作って、`app/views/layouts/`配下に作る

※`app/views/layouts/devise.html.erb`で作るとします

devise.html.erb

“`jsx



Sample
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'rel

元記事を表示

【rails】.envファイルに環境変数を設定する

# はじめに

– 外部に公開したくないpasswordなどを環境変数として `.env`ファイルに設定する。
– githubにコミットした際に、 `gitignore` ファイルに.envファイルを指定することで、パスを外部に公開されないようにすることができる。
– 上記の手順を簡単に下記へまとめる。

# 手順

– detenvを `Gemfile` にインストール

“`jsx
gem ‘dotenv-rails’
“`

– `.env` ファイルに外部に公開したくないIDやpassを記述する

“`jsx
LOGIN_NAME=’name123′
LOGIN_PASSWORD=’pass123′
“`

– 上記を `環境変数` として他のファイルから呼び出す際は以下のように記述する

“`jsx
ENV[‘LOGIN_NAME’]
ENV[‘LOGIN_PASSWORD’]
“`

– Githubに.envファイルがコミットされないように `.gitignore` ファイルに以下を追加

“`ruby
/.env
“`

# 参考

https://q

元記事を表示

【rails】OAuthを用いて、GitHub認証ログイン機能を実装する

# やりたいこと

– deviseのomniauthableの機能でgithubログインを実装する
– [ログイン](http://localhost:3000/users/sign_in),[サインアップ](http://localhost:3000/users/sign_up)からgithubログインができるようにする。

– 挙動
– サインアップ、ログイン画面より「GitHub認証」のボタンを押下
– GitHubのログイン画面へ遷移しid,パスを入力しログインボタンを押下
– github上で認証するためのトークンを発行し、それをWebサイト側で検証
– 上記が認証されるとトップ画面へ遷移する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/515b9f63-e3b8-c9e4-0d21-6a0f981afc17.png)

# 調査

– 必要なこと
– omniauthableの実装に必要なge

元記事を表示

【Amazon Linux 2023】ElasticBeanstalkでffmpegが動かなくなった件

どうもこんにちは。

今回は、Railsのバージョンを上げたときに生じた問題を解決したのでその備忘録を書いていきます。

# 変更した点

変更した点は以下です。

| 変更箇所 | 変更前 | 変更後 |
| — | — | — |
| Ruby | 3.0.6 | 3.2.2 |
| Rails | 7.0.5 | 7.1.3.2 |
| プラットフォーム | Ruby 3.0 running on 64bit Amazon Linux 2 | Ruby 3.2 running on 64bit Amazon Linux 2023 |

# 発生したエラー

Railsのバージョンを上げた時に、`jquery-ui`が動作しなくなった問題はありましたが、`@hotwired/turbo-rails”`を先にインポートしたら解決しました。

ただ、今回は`ffmpeg`の`ffprobe`コマンドが正常に実行されなくなった問題を解消した方法を記載します。

# 解消方法

## 0. 前提条件

以下の事柄は実施しているものとします。

– `Ruby 3.2 runni

元記事を表示

OTHERカテゴリの最新記事