- 1. CRUDとは
- 2. sidekiq-cron で設定した定期実行処理が schedule ファイルから削除しても停止しない
- 3. validatesの数値チェックについて
- 4. 【Rails6.1】AIチャットと一緒に在庫を減らす処理を考えた話
- 5. Rails ルーティング namespace / module の使い方
- 6. 【Rails】Ruby on Rails 5 速習実践ガイド感想
- 7. 【Ruby on Rails】Rails理念に沿ったビューの共通化
- 8. 【Ruby on Rails】destroyアクションに実装させるturbo_methodとturbo_confirm
- 9. rack-attack だと十分でなく、Web アプリケーションファイアウォール(WAF)を使う理由
- 10. CompanyユーザからStaffユーザを編集する方法(別モデルからの編集)
- 11. 【個人開発】プレゼントして欲しいものを謎解きで伝えることができるアプリを開発しました
- 12. Rails Ransack 複数カラムを使用した絞り込み検索の実装
- 13. Rails: controller層でパラメータをrequireに設定すると空配列が弾かれてしまう
- 14. rails7 確認画面の遷移で沼った話
- 15. 【Rails】form_withでデータを送信する際にpostではなくgetを使った話
- 16. ER図について②
- 17. 【+α】初学者がRailsガイドから知見を広げる(’Active Record バリデーション’編 1)
- 18. RSpecべからず集(DSLの構築が不適切な事例あれこれ)
- 19. Active Storageのファイルアクセス時に独自処理を経由させる方法(Rails v6.1.0以降)
- 20. ECサイト ER図
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**での数値チェックについて書いてみました。
## 内容
#### その1validatesで数値チェックをする場合、基本な書き方はつぎのようになります。
“`
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
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