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

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

【Devise】メーラーのテンプレートパスをカスタマイズする

# はじめに
Deviseを使用する中で、特定の状況においてConfirmationメールの送信に使われるテンプレートのパスを変更する必要が生じました。[Deviseの公式Wikiにはガイドライン](https://github.com/heartcombo/devise/wiki/How-To:-Use-custom-mailer)が記載されていましたが、Rails7ではなぜかその方法では解決できなかったため、Deviseのソースコードを分析し、別の解決策を探りました。

# 方法 1: headers_for メソッドのオーバーライド
Deviseでは、`Devise::Mailer`の`Helpers`モジュール内にある`headers_for`メソッドを通じて、メール送信に必要な全てのヘッダ情報を生成します。このメソッドは、メールの件名(`subject`)、受信者(`to`)、送信者(`from`)、返信先アドレス(`reply_to`)、テンプレートパス(`template_path`)、そしてテンプレート名(`template_name`)を含むハッシュを作成します。

元記事を表示

RESTfulって結局なんなんだ

## 記事を書いた経緯
Ruby on Railsでresourcesを使うにあたって、これはRESTfulってやつをちゃんとわかっていないとダメだと思ったので自分なりにまとめた記事です
これまでDjangoやRailsの中でなんとなく把握していたRESTfulという概念について初心者なりに深掘りしてみました。

## そもそもRESTってどのレイヤーで何を指す言葉?
教科書的にいうと、

『ウェブサービスの設計スタイルで、リソースをURLで識別し、HTTPメソッドを使用して操作するステートレスなアーキテクチャ』

分かるようなわからないような感じです。
何か学ぶときにこの言葉がどの辺のレイヤーにいるのかイメージできると理解が進むのでここをはっきりさせたい。

ということでもう少し身近な建設に例えてこんな感じにイメージしました

![スクリーンショット 2023-12-05 15.43.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480176/8b28aad6-6

元記事を表示

Rails開発経験8年選手がC#.NETの開発をキャッチアップするまでの流れ

WEMEX株式会社 Advent Calendar 2023の6日目です。本記事では、バックエンド開発ではRailsを主戦場に経験を積んできた筆者がC#.NET開発をキャッチアップするまでの流れについてまとめてみました。

## はじめに
私は、もともと新規で立ち上げたビジネスのプロダクト開発に従事するためにRailsエンジニアとしてWEMEXに入社しましたが、数ヶ月前より、C#.NETのプロジェクトに携わっています。従来から開発していたRailsのプロジェクトの開発も並行してはいますが、プロジェクトの進捗具合により、今はC#.NETのプロジェクトに割く時間が多いという状況です。

これまでももともと担当していたプロジェクト以外の開発を臨時的に、または主担当として担当をすることはあったので、プロジェクトが変わること自体は珍しいことではありません。しかし、今回がちょっと変わったのは、使用する技術がRailsではなくC#.NETだということです。ただし、フロントエンドとバックエンドは分かれており、WebのAPIをC#.NETで開発するという、最近では一般的な構成です。Webに関してはRa

元記事を表示

【Ruby on Rails】paramsについて理解しながら検索機能を作ろう

# 【Ruby on Rails】paramsについて理解しながら検索機能を作ろう

## 目次
[1.はじめに](#1-はじめに)
[2.前提・テンプレ作成](#2-前提テンプレ作成)
[3.詳細画面の表示](#3-詳細画面の表示)
[4.検索機能の実装](#4-検索機能の実装)
[5.まとめ](#5-まとめ)

## 1. はじめに

本記事は、DMM WEBCAMP Advent Calendar 2023 6日目記事です。
DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご覧ください!

### 執筆背景

Ruby on Railsを学習中に、よく`Post.find(params[:id])`みたいな記述を見かけると思います。
この`params`という記述は、ページ遷移やデータを作成する時に用いられ、さらにはタグによる絞り込み機能や検索機能にも登場します。

paramsがいまいち理解できない、活用方法が思い浮かばないという方に向けて、本記事を執筆いたしました。

### 目的
– paramsを理解する
– paramsを用いた検索機能を実装する

#

元記事を表示

JqueryでRedmineのメニューを閉じたり開いたりする方法

## JqueryでRedmineのメニューを閉じたり開いたりする方法
[Redmine Advent Calendar 2023](https://adventar.org/calendars/8974)の6日目の記事として作成しました。

* * *
### やりたいこと

Redmineのメニュー領域がかなり広いため、ユーザーが表示させたいチケットなどの情報を表示させる領域が相対的に狭くなるというデメリットがありました。
[Redmineでサイドバーを非表示にする](https://redmine.jp/faq/general/hide-sidebar/)で紹介されているような、サイドバーの開閉に対応しているテーマを利用する理由も、作業領域の最大化に対するニーズがあるからです。

テーマやプラグインをインストールしても、Redmineのメニューを閉じたり開いたりすることができますが、今回は、もっと簡単に、JqueryでRedmineのメニューを閉じたり開いたりする方法を紹介いたします。

下図の動画が完成イメージです。
マウスクリックではなく、マウスオーバーでメニューを開閉でき

元記事を表示

solid_cacheについて調べてみた

## はじめに

この記事は[Ruby on Rails Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ruby-on-rails)の記事です。

## solid_cacheとは

`solid_cache`とは最近(具体的には2023年10月)に[最初のバージョンがリリースされた](https://rubygems.org/gems/solid_cache/versions/0.1.0)gemです。目的はRailsのcache storeの一つになることで、Redisなどを使わずRDBにキャッシュを保存することが特徴です。余談ながら、[initial commitは2022年11月](https://github.com/rails/solid_cache/commit/de56c1456f309f1df456c6be0482fe913d98239a)でしたので、約1年秘密裏に開発されていたことになります。

https://github.com/rails/solid_cache

## なぜRDBにキャ

元記事を表示

Railsアプリの画像をS3にアップロードをしてみた

# はじめに
フロントエンドよりの駆け出しエンジニアの私が、Railsのアプリケーションの画像をS3にアップロードしてと言われたのでやってみたの記事を書こうと思います。

# そもそもS3とは
AWSのオンラインストレージサービスです。
画像データは容量が重く、データベースでの保存だと、クエリの実行速度が重くなり、パフォーマンスが低下します。
さらに、ストレージ容量が満たされ、拡張が必要になることがあります。
そのため、S3などの大規模データを保管することに特化したサービスを使います。

S3以外の画像やファイルのストレージサービスには以下のようなものがあります。
– Google Cloud Storage
– Microsoft Azure Blob Storage
– Backblaze B2:

# Railsで、画像をS3にアップロードする方法
Railsで、画像をS3にアップロードする方法を調べました。
## 方法1 Active Storage
Rails標準の技術のActive Storageを使用する方法があります。
Active Storageは、ファイルアップロー

元記事を表示

Instagram Graph APIを使ってみた(Rails)

# 概要
おはこんばんにちわ。お疲れ様です。

RailsでInstagram Graph APIを導入したので備忘録ついでにそっと置いておこうと思います。

# 環境
– Rails 6
– faraday 1.8.0

# 始めに
Instagramには複数のAPIがありますが今回は表題にもある通り**Instagram Graph API**について解説します。

今回Railsでアカウント名を保存してそのアカウントの投稿内容を表示するということをやりました。

すなわち、1つのAPIキーから複数のアカウント情報を取得するということをやりましたので紹介します。

# Instagram Graph APIとは
グラフAPIの公式ドキュメントを雑に置いておきます。

[Meta for Developers](https://developers.facebook.com/docs/graph-api/)

ざっくりいうといろんなアカウントのいろんな情報が取れます。
しかもなんと**無料で!!!**

ただ感想としては**設定が面倒

元記事を表示

【個人開発/未経験】睡眠の質を高めるためのサポートをするアプリを開発してみた

# はじめに
はじめまして!@tomoya4819と申します。

突然ですが、皆様は質の良い睡眠を取り、スッキリとした朝を迎えられていますか?
私は夜遅くに寝て、朝ギリギリに起きるという生活を繰り返していた、朝が苦手な人間でした。

そこで、睡眠の質が良くなる行動をいくつか調べ、実践してみると夜早く寝付けるようになり、朝も余裕を持って起きることができました。
しかし、一番大切なのはその行動を続けること。つまり続けやすくなるようなアプリを作ればより睡眠の質改善に繋がるのでは!?と思い、本アプリ作成へと至りました。

※私は現在プログラミング学習中の未経験エンジニアであり、技術的な内容などは誤りを含む可能性があります。
そのため、間違っている点があればコメント等で教えていただけると幸いです。:bow_tone1:

# サービス名:[ZzzCrafter](https://zzzcrafter.fly.dev)
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3185454/e4a1a43b-c9

元記事を表示

Railsで考える物理削除と論理削除の使い分け

# 物理削除(Physical Deletion)とは
**`物理削除`は、DBから対象のレコードを完全に削除する方法です。**

“`ruby:app/controllers/customers_controller.rb
class CustomersController < ApplicationController def destroy @customer = Customer.find(params[:id]) @customer.destroy redirect_to customers_path, notice: "顧客情報を削除しました。" end end ``` # 論理削除(Logical Deletion)とは **`論理削除`は、レコードを物理的には削除せずに、削除を表すための方法です。** 真偽値でフラグをカラムとして追加することで、フラグによって、削除されたデータは非表示になり、実際にはDBにはレコードとして残されています。 ```ruby:schema.rb create_table :customers do

元記事を表示

Rails6 で Webpacker で SimpleCalendar なやつをコピペでサクッとCSSを添えて

## この投稿は、

[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)
シリーズ2 投稿5日目のエントリーです。

4日目は @Fkinds さん で
[初学者向けdocker基礎](https://qiita.com/Fkinds/items/33dcfff97481509a42bd)でした。
すごく簡素に纏められていて素敵な記事でした。

## はじめに
DMM WEBCAMP でメンターをやらせていただいております。 @tomoaki-kimura です。
Rails7のリリースから随分経ちますが、Rails6の環境もまだまだあります。
今回は、`simple_calendar` 使う時に、`app/javascript/`側にCSS欲しいのに・・・という場面があったので書き残しておきます。

## 環境
– Ruby 3.1.2
– Rails 6.1.7
– yarn 1.22.18

## 作るもの

[![Image from Gyazo](https:/

元記事を表示

【rails】 ActiveRecord exists? present? empty? blank? の使い分けどころ

## はじめに
初学者の頃から分かったような気がするけど、適切に使いこなせてなかった
`ActiveRecord`の `exists?`, `present?`, `empty?`, `blank?` の
使い分けについて最近やっと腑に落ちたのでメモリます。

## exists

データが1件でもあるかどうかチェックするには`Model.exists?`を使う。
どういうことかというと
“`ruby
Pokemon.exists?
Pokemon Exists? (98.6ms) SELECT 1 AS one FROM `pokemon` LIMIT 1
=> true
“`

ポイントになるのが`SELECT 1 AS` というところ。
データが1行以上「あるかどうか」だけが問題となります。
ということで、データの値を取ってくる必要がないため、
カラムの情報が一切ないことがわかります。

**ちなみにこれと反対の意味を持つのが`empty?`である**

## blank?

“` ruby
Pokemon.where(type: ‘F

元記事を表示

Kaigi on Rails 2023に登壇しました

## はじめに

こんにちは。なおとです。

1ヶ月強前の話ですが、10/27(金)-10/28(土)の2日間にわたって開催されました「Kaigi on Rails 2023」に参加、登壇させていただきましたので、その感想を述べたいと思います。

本記事では私の登壇内容について今回はほぼ触れません。
以下のリンクにセッション内容や動画が公開されておりますので、見ていただけると嬉しいです。

https://kaigionrails.org/2023/talks/naoto/

# Kaigi on Railsとは

まず、Kaigi on Railsが何か、簡単に紹介します。
こちら[公式](https://kaigionrails.org/2023/)からの引用です。
> Kaigi on Railsのコアコンセプトは「初学者から上級者までが楽しめるWeb系の技術カンファレンス」です。Kaigi on Railsは技術カンファレンスへの参加の敷居を下げることを意図して企画されています。また、名

元記事を表示

RailsでHTTP OPTIONSリクエストをルーティングする

最近`rails routes`を実行したときに、見慣れないHTTP OPTIONSリクエストのルーティングを目にしたので調べました。

## よくあるルーティング
Railsでは`resources`メソッドを使うことで、あるリソースを操作するコントローラの各アクションにリクエストをマッピングできます。
“`ruby
Rails.application.routes.draw do
resources :products
end
“`
`resources`メソッドでは `GET`、`POST`、`PATCH`、`PUT`、`DELETE`リクエストに対するルーティングは作成されますが、`OPTIONS`メソッドのようにリソースを操作しないリクエストのルーティングは作成されません。

## OPTIONSメソッドとは
> HTTP の OPTIONSメソッドは、指定された URL またはサーバーの許可されている通信オプションをリクエストします。

> レスポンスには、許可されているメソッドを含んだ Allow ヘッダーが入ります。
“`bash
> curl -X OPTI

元記事を表示

【Ruby on Rails】RuboCopでコードの治安を守ろう

## まえがき

本記事は、**[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)** 5日目記事です。

Ruby on Railsを中心に、DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご確認ください!

## はじめに

こんにちは、DMM WEBCAMP メンターの @ukwhatn です。

本カレンダー3回目の担当日となりますが、今日はRuby on RailsにおけるRuboCopの使い方について説明していきます。

## Rubocopとは?

[RuboCop](https://github.com/rubocop/rubocop)とは、Ruby向けのlinter、つまり静的コード解析ツールです。

:::note warn
**待ってよ、そもそもlinterって?**

linter(リンター)とは、ソースコードを実行前に解析することで、事前にバグやコーディングミスを検出したり、コミュニティやプロジェクトが定めたコーディング規約から

元記事を表示

Import mapsでJavaScriptを管理しているときのstimulus controller登録の仕組み

# はじめに

Railsでstimulusを使う場合は、[stimulus-rails](https://github.com/hotwired/stimulus-rails) gem が使われます。
このgemにより、stimulus controllerを生成できます。
生成されたstimulus controllerは、JavaScriptの管理方法に応じた方法で、登録する必要があります。

JavaScriptの管理方法としてJavaScript bundlerを使う場合は、`register`メソッドを使います。
“`js
import HelloController from “./hello_controller”
application.register(“hello”, HelloController)
“`

JavaScriptの管理方法としてimport mapsを使う場合は、`eagerLoadControllersFrom`メソッド or `lazyLoadControllersFrom`メソッドを使います。
“`js
// Eager load a

元記事を表示

【Ruby】pメソッドとputsメソッドの違い

# 【Ruby】pメソッドとputsメソッドの違い

Rubyにおける`p`メソッドと`puts`メソッドは、どちらも出力を行うメソッドですが、その振る舞いには重要な違いがあります。この記事では、これらのメソッドの特徴と違いを初心者にも分かりやすく解説します。

## pメソッドの特徴

`p`メソッドは、オブジェクトのデバッグ出力に適しています。具体的には以下の特徴があります。

### データ型を明示

`p`メソッドは、オブジェクトの型や内容を明示的に出力します。これにより、データの構造や型を正確に理解することができます。

### `inspect`メソッドの結果を出力

`p`メソッドは、内部的にオブジェクトの`inspect`メソッドを呼び出し、その結果を出力します。これにより、オブジェクトの内部表現を詳細に確認できます。

### 例

“`ruby
p “hello” # 出力:”hello”
p 123 # 出力:123
p [1, 2, 3] # 出力:[1, 2, 3]
“`

## putsメソッドの特徴

`puts`メソッドは、より一般的な

元記事を表示

reCAPTCHA v2 を Rails に導入する方法

# はじめに

ログイン不要のお問い合わせページにbotから入力がありました。
ログイン不要は続けたいものの、botは弾きたいところです。
そこで、今回はreCAPTCHAを入れることで対応を試みました。

reCAPTCHAには、v2 → v3 → Enterprise と様々な種類があります。
参考までに v2、v3、Enterpriseの違いを軽く載せておきます。
詳しくは[google公式記事](https://cloud.google.com/recaptcha-enterprise/docs/compare-versions?hl=ja)をご覧ください

| バージョン | 判定 | 値段 |
| — | — | — |
| v2 | 画像認証 | 無料 |
| v3 | 自動 | 無料 |
| Enterprise | 自動 | 100万回/月以上は有料 |

個人〜中規模開発では通常のreCAPTCHAでの判定で基本は問題ない認識です。

その中でも、v2 は「画像認証が手間だが確実に判断できる」v3 は「自動認証で楽だが人間を却下する可能性がある」という点

元記事を表示

【Ruby】サトシになったつもりでクラスについてまとめてみた(初学者向け)

# はじめに

Ruby Silverの勉強をして身についた知識のなかで、クラスについての知識がRailsにも生きていると感じたので、まとめていきます。
Ruby Silver合格までの勉強方法は前回記事でまとめています。
[【プログラミング初学者】Ruby Silverに合格したのでまとめました!](https://qiita.com/fukuidaito/items/c05ade02d8e4aef8d210)
# 目次
| 章 | タイトル |
|—:|————-|
| 1 |[オブジェクト指向の基本的な単語の説明](#基本的な単語の説明)
| 2 |[クラスの定義とインスタンスの作成](#クラスの定義とインスタンスの作成)|
| 3 |[インスタンスメソッドの定義](#インスタンスメソッドの定義) |
| 4 |[インスタンス変数とアクセサメソッド](#インスタンス変数とアクセサメソッド) |
| 5 |[クラスメソッドとクラス変数の重要性](#クラスメソッドとクラス変数の重要性) |
| 6 |[クラスの継

元記事を表示

`dependent: :destroy`のhas_one関連レコードbuild時の奇妙な挙動

ある時、has_oneの関連レコードがすでに紐づいている状態で、build_association_nameで新たなレコードを作成しsaveをしても、特にエラーなどが起きずレコードが置き換わっていることに気づきました。
この挙動が奇妙だったため何が起きているのか調査をしてみることにしました。

## has_oneのbuild_associationでDELETEが実行されていた
rails7.1.2で以下のようなモデルを使って検証をしてみます。
ポイントはhas_oneに対して`dependent: :destroy`のオプションを与えている点です。

“`ruby
class Supplier < ApplicationRecord has_one :account, dependent: :destroy end class Account < ApplicationRecord belongs_to :supplier end ``` Supplierのhas_oneの関連レコードであるAccountを永続化して紐付けた状態にしておきます。 ```ruby i

元記事を表示

OTHERカテゴリの最新記事