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

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

!/bin/bashを記載しているのにentrypint.shでerrorが発生する場合の解決策

# !/bin/bashを記載しているのにentrypint.shでerrorが発生する場合の解決策

## 発生した事象
docker compose runでrails newをする際に、以下のエラーが発生
“`
exec /usr/bin/entrypoint.sh: exec format error
“`

## 原因
いろいろ調べてみて、entrypoint.shに#!/bin/bashを記載すると良いとかplatform: linux/amd64を指定してあげれば良いという記事があった。
どちらもやってみたが、解決はできなかった。

そこで、再度他の方が書いているentrypoint.shの記載と再度見比べてみる。一部違う部分があった。

## 解決策
他の方は一行目に#!/bin/bashが記載してあったが、エラーが発生したentrypoint.shは一行目に別のコメントを#で残していて2行目に#!/bin/bashを記載していた。

これを削除するとエラーが解決した。
“`
# コメント ← 記載していた部分を削除
#!/bin/bash
set -e
“`

元記事を表示

RubyでPHPのvar_dumpライクな機能を提供するGem『ruby_var_dump』をリリースしました

# Gem「ruby_var_dump」を作成&リリースしました
RubyでPHPのvar_dumpライクな機能を提供するGem『ruby_var_dump』をリリースしました

RubyGems.org
https://rubygems.org/gems/ruby_var_dump

Github
https://github.com/hirokiyam/ruby_var_dump

## 特徴
PHPのvar_dump関数に相当する機能をRubyで実現します。
変数の中身を詳細に表示するためのツールです。

## 使い方
Gemfileに以下を追記します。
“`ruby
gem ‘ruby_var_dump’
“`

gemをインストールします。
“`terminal
bundle install
“`

### 使いたいクラスで呼び出す場合

ruby_var_dumpを使いたいクラスに以下を追加して、RubyVarDumpモジュールのメソッドを組み込みます。
“`ruby
require ‘ruby_var_dump’ #ファイルの先頭に追加

include Rub

元記事を表示

【Rails】Boolean 型を入力必須にする

## 概要

`Rails` で `Boolean` 型の値を入力必須にしたいときに `presence: true` を使っても期待通りに動作しませんでした。この記事ではその原因と対処法について説明します。

## 原因

“`rb
validates :column, presence: true
“`

このように記述すると `false` を選択した場合には値が入力されていないと認識されてしまい、バリデーションエラーが発生します。`presence: true` は `false` を無視してしまうため、`Boolean` 型の値には適していません。

## 対処法

“`rb
validates :column, inclusion: { in: [true, false] }
“`

`inclusion` バリデーションを使って `true` か `false` のどちらかの値が含まれているかを確認します。これにより `false` も有効な値として認識されるため、正しくバリデーションが行われます。

## まとめ

`Boolean` 型の値を入力必須にしたい場

元記事を表示

CRUDとは

## CRUDとは
アプリケーション作成時の4つの機能の頭文字を並べたもので
ほとんどのアプリはこの4つの機能で成り立っている

C Create 作成
R Read  表示
U Update 更新
D Delete 削除

## コントローラ記述用コード
“`ruby:controller.rb
# 一覧表示
def index
end

# 詳細表示
def show
end

# 作成
def new
end

# 登録
def create
end

# 編集
def edit
end

# 更新
def update
end

# 削除
def destroy
end
“`

元記事を表示

sidekiq-cron で設定した定期実行処理が schedule ファイルから削除しても停止しない

[sidekiq-cron](https://github.com/sidekiq-cron/sidekiq-cron) で動かしていた定期実行ジョブを停止しようと際に詰まったので備忘録。

## 背景

“`rb:config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
config.on(:startup) do
schedule_file = “config/schedule.yml”

if File.exist?(schedule_file)
schedule = YAML.load_file(schedule_file)

Sidekiq::Cron::Job.load_from_hash!(schedule, source: “schedule”)
end
end
end
“`
“`yml:config/schedule.yml
test_hello_world:
cron: “*/1 * * * * ” # 1分ごとに実行

元記事を表示

validatesの数値チェックについて

## 環境
Rails5.2
Ruby2.6

## はじめに

Railsの**validates**での数値チェックについて書いてみました。

## 内容
#### その1

validatesで数値チェックをする場合、基本な書き方はつぎのようになります。

“`
validates :hoge, numericality: true
“`

この設定は、Railsガイドによると「整数値または浮動小数点数値にマッチする。符号がある場合もマッチする。」と書かれています。つまり、次の入力はすべてOKになります。

“`
0   # 〇
9   # 〇
+9   # 〇
-9   # 〇
0.999 # 〇
9.999 # 〇
+9.999 # 〇
-9.999 # 〇
“`

数値の入力チェックをこれだけで済ませると、あまりにもざっくりしすぎです。ほとんどの場合において、数値の入力チェックは、もっと、他の条件との組み合わせで行うことになります。

#### その2

整数だけにマッチさせて、浮動小数点数値にはマッチさせたくない場合は、次のようになります。ちなみに

元記事を表示

【Rails6.1】AIチャットと一緒に在庫を減らす処理を考えた話

# はじめに
Railsの学習中に、予約時に在庫を減らす作業が分からなかったので、調べたりAIに聞いたりしながら完成させた記述について記録します。

# 結論
在庫を減らす処理には、「decrement!」というレコードの値を減らすことのできるメソッドを使用しました。
“`ruby:
item = Item.find_by(params[:pre_order][:item_id])
@pre_order.amount = params[:pre_order][:amount] #予約数:amountをフォームから受け取る
item.decrement!(:stock, @pre_order.amount) #decrement!でitemの在庫:stockを減らす
“`

# 記述修正の流れ
最初、自分で調べたり考えてみたりしてみたのですが、どうにも上手くいかなかったのでAIチャットに聞いてみることにしました。

## AIへの質問
「railsにおいて予約機能を作成中です。
@​pre_orderがsaveできたらitemレコードのstockカラムの数を1個減らす処理

元記事を表示

Rails ルーティング namespace / module の使い方

# はじめに
わからなかったことを教えてもらったので、
アウトプットに投稿します!

初っ端から躓いたルーティング…
namespace / module はどう使い分けるのか😕
まとめていきます!

# ルーティングの特徴
### 何も指定しない場合(通常のルーティング)

“`routes.rb
get ‘home/about’ => ‘homes#top’
“`

通常のルーティング
Prefix Verb URI Pattern Controller#Action
home_about GET /home/about(.:format) homes#about

“`r

元記事を表示

【Rails】Ruby on Rails 5 速習実践ガイド感想

# はじめに
Railsを勉強中。
Ruby on Rails5 速習実践ガイドを読んだので勉強したことなどのまとめ。

:::note warn
Railsの最新バージョンは記事執筆時点で7.1となっているため、参考にされる方はバージョン差異による挙動の違いなどにお気をつけください。
:::

# 学んだこと
– リダイレクトする際の`flash[:notice]`のようなメッセージなどの渡し方は、`flash[:alert]`も用意されている
– レンダーで渡したい際には`lash.now[:alert]`なども使える
– flash.keepなども使える
– コールバック:処理の前後に任意の処理をよばせる
– オリジナルの検証処理の書き方、`validate`と`validates`は違うので気をつける
– マイグレーションでバージョン上げ下げを指定できる
– データの絞り込み条件
– scopeの活用:繰り返しの絞り込み条件を読みやすく記述できる `scope :名前 -> { 指定条件(条件の値)}`
– 重複を避けるためにフィルタを使う
– Rspec(自動テスト)について

元記事を表示

【Ruby on Rails】Rails理念に沿ったビューの共通化

共通させるビューのファイル名には、アンダースコア[ _ ]から記述化させるのがルールです。
“`:ファイル名:例
_common.html.rb
“`

# ■方法
1. 共通するコードを[ _ ]ファイルに記述
2. コピー元のコードを削除
3. 共通化させたいファイルに以下のコード記述
“`ruby:共通させるビューのファイル
<%= render partial: 'アンダースコアを取り除いたファイル名' %>
“`
※アンダースコアは書かないルール

元記事を表示

【Ruby on Rails】destroyアクションに実装させるturbo_methodとturbo_confirm

### ■ 使用される場面
destroyアクションを使いデータを削除する場面。

### ■ 参考コード
“` Ruby
<%= link_to("削除", "/users/index", data: {turbo_method: 'delete', turbo_confirm: '本当に削除してよろしいですか?'}) %>
“`

### ■ 重要度
★★★

### ■ 効果
**`turbo_method: ‘delete’`**
Turbolinksを使用してHTTP DELETEリクエストを送信するための指示。
通常のHTMLリンクでは送ることは出来ないが,TurbolinksはJavaScriptを介してこの機能を実現できる。

**`turbo_confirm: ‘本当に削除してよろしいですか?’`**
削除リンクをクリックした際、ユーザーが確認できるためのメッセージ。
誤操作防止。

### ■ その他
この機能は、通常はJavaScriptで実装されますが、Railsでは`link_to`ヘルパーを使用することで、JavaScriptで書くことなく実装でき

元記事を表示

rack-attack だと十分でなく、Web アプリケーションファイアウォール(WAF)を使う理由

> Cloudflare に出来て rack-attack に出来ないことって何でしょうか。これについて何かご存じですか? また、rack-attack を Cloudflare の WAF と同じように動作させるよう改良できる可能性はあるのでしょうか? -Sammy

とても良い質問ですね。「分散型サービス妨害(Distributed Denial of Service:DDoS)」とは何かを理解し、リトルの法則をほんの少し用いて考えると、この質問にかなりうまく答えられるのではないかと思います。

まず、DDoS の本質を理解しましょう。DDoS とは、簡単に言えば、アプリに対する分散された多数の IP アドレスからの大量のトラフィックです。この「大量のトラフィック」という点が、サイトをダウンさせる要因です。膨大な量のリクエストに圧倒されると、インフラストラクチャの何かが壊れ(通常はデータベース、または単に十分な Web サーバーの容量を確保できないなど)、サイトは事実上ダウンしてアクセスできなくなってしまいます。そして、「分散された」という点が、この脅威を防ぐのを困難にしている要因

元記事を表示

CompanyユーザからStaffユーザを編集する方法(別モデルからの編集)

必要事項を記載して更新しようとすると、以下のようなことが起きた。
1. current_passwordを正しく入力しても不正とみなされる
1. emailアドレスを変更していない場合でも既に使用されているとしてバリデーションに引っかかる

上記を解消したコードは以下の通り(※備忘録なので詳細説明省く)

“`app/controllers/staffs/registrations_controller.rb
# frozen_string_literal: true
class Staffs::RegistrationsController < Devise::RegistrationsController before_action :set_staff, only: %i(edit update destroy) before_action :authenticate_staff!, only: %i(edit update destroy) load_and_authorize_resource :class => ‘Staff’, except: %i(cre

元記事を表示

【個人開発】プレゼントして欲しいものを謎解きで伝えることができるアプリを開発しました

## はじめに
はじめまして、[sami](https://twitter.com/sammy_study)と申します。
未経験からWebエンジニアへの転職を目指して、プログラミングスクールで学習しています。
この度、プレゼントして欲しいものを謎解きで伝えることができるWebアプリ「ギフトリクエスト」をリリースいたしました。
## サービス名
[**ギフトリクエスト**](https://www.gift-request.com/)

ゲストログイン機能を実装したので、会員登録せずにお試しいただくこともできます。

[![Image from Gyazo](https://i.gyazo.com/eb785f4709dbf556bd5bdc3a226c196e.png)](https://www.gift-request.com/)

**サービスURL**

https://www.gift-request.com/

**Github**

https://github.com/sami-0085/gift_request

## サービス概要
プレゼントして欲しいものがあるけど直

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事