Rails関連のことを調べてみた2022年11月17日

Rails関連のことを調べてみた2022年11月17日

log_tagsでRails.loggerにsessionのuser_idを出力する

## 環境

* Rails 7.0.4
* redis 6.2

## cookie_storeの場合

“`rb
# config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, …

# config/environments/development.rb
Rails.application.configure do

config.log_tags = [
:request_id,
lambda { |req|
session_key = (Rails.application.config.session_options || {})[:key]
session = req.cookie_jar.encrypted[session_key] || {}

“user_id: #{session[‘user_id’] || ‘-‘}”
}
]
end
“`

## redis_stor

元記事を表示

Bullet Trainを始めよう?️

## Bullet Trainとは
[Bullet Train](https://github.com/bullet-train-co/bullet_train)とはRuby on Rails上で動くSaaSのフレームワークです([Jumpstart](https://jumpstartrails.com/)みたいなもの)。
つまり、Railsを拡張しているものなので、新規アプリを作った時点で以下の機能がもうすでについています。
1. Deviseを使ってのユーザー登録・認証
2. Sidekiq & Redisのバックエンド・ジョブの設定
3. Jbuilderを使ってのAPI自動生成
4. Webhookの自動生成

他にも機能がたくさんありますし、Pro版を買ったらStripeの決済処理の設定など、色んな便利なツールが使えます。
[公式サイト](https://bullettrain.co/)
Bullet Trainの作成者:[Andrew Culver氏](https://twitter.com/andrewculver)
[Discord](https://discord.

元記事を表示

管理者と顧客を分けてDeviseを導入

## 初めに
今回は管理者と顧客を分けてDeviseを導入していきたいと思います。
※実装前提としてDeviseを導入していること

## 管理者と顧客のモデル設定

管理者側がAdmin
“`
管理者用
$ rails g devise Admin
“`
今回顧客側がCustomer
“`
顧客用
$ rails g devise Customer
“`
これをそれぞれターミナルに打ち込みます。

## 次にcontrollerを管理者、顧客で作成
“`
管理者用
$ rails g devise:controllers admin
“`
“`
顧客用
$ rails g devise:controllers public
“`
これらをそれぞれ記述するとappのcontrollerの部分がadminとpublicそれぞれ作成され2つに分かれてくれます。

## viewページの方も作成

“`
管理者用
$ rails g devise:views admins
“`
“`
顧客用
$ rails g devise:views publics
“`
これ

元記事を表示

【RSpec】validate_uniqueness_ofでテストが落ちるときの対処

## 環境
Rails 6.1.3.1
ruby 2.7.1
mysql Ver 8.0.26

##

“`shoulda-matchers“`というGemを使ってテストを書くとき、下記のエラーでテストが通らない。

“`ruby
it { is_expected.to validate_uniqueness_of(:number) }
“`

“`
Expected Employee to validate that :number is unique, but this could not
be proved.
After taking the given Employee, whose :number is ‹0›, and saving it
as the existing record, then making a new Employee and setting its
:number to ‹0› as well, the matcher expected the new Employee to be
invalid, but it was valid in

元記事を表示

配列になっているJSONの値を複数レコードとして保存する

railsでJSONファイルで値を受け取る際、その値が配列になっていたとします。これをいい感じにdbに保存する方法を模索しました。
## 結論
each文で回すしかなくない?
私の技術力不足、ググり力不足かもしれないけどeach文で回して値整理してって感じしか思いつかない。

## 私の実装方法
想定しているJSON
“`json
{
“proposed_days”: [
“2022-11-14T18:15:45.087+09:00”,
“2022-11-14T18:16:45.087+09:00”,
“2022-11-14T18:52:09.671+09:00”
]
}
“`
controllerでの処理
“`ruby
proposed_days_params.each do |proposed_at|
render json: event.errors unless possible_dates.create(proposed_at:)
end

private
def proposed_days_params
params.require

元記事を表示

Rails 7.0.4のScaffoldで生成されるファイルのサンプル

Railsアプリの開発をしていると、Scaffoldで生成されるファイルではどうなっていたかなと思うことがあるので、参照できるようにしました。

“`bash
% rails new app –css=bootstrap
% rails g scaffold Content title:string body:text
“`

# Model

“`ruby:app/models/content.rb
class Content < ApplicationRecord end ``` # Controller ```ruby:app/controlers/contents_controller.rb class ContentsController < ApplicationController before_action :set_content, only: %i[ show edit update destroy ] # GET /contents or /contents.json def index @contents = Content.a

元記事を表示

【個人開発】動物好き必見!動物とのふれあいに特化した検索サービス『FLUFF MAPS』を作りました!

![top3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253662/4ed74182-39f9-020b-a1bd-0959e9631f03.jpeg)

この度「動物とふれあうことができる施設を簡単に検索できるサービス【FLUFF MAPS】」をリリースしました!

__サービスURL__
https://www.fluff-maps.com

__GitHub__
https://github.com/kazuki1025okumura/fluff_navi

## はじめに
はじめまして![おくむら](https://twitter.com/kazuki_okumura)と申します。
私自身、動物が大好きでよく牧場や動物園にふれあいにいきます。

ネットでそういった施設を探していて、「条件を絞り込んで検索できたらな」だったり「ふれあうことができる動物が一覧で見れたらな」と感じていて、それなら自分で作ってしまおう!と思い製作しました。

## このアプリへの思い

元記事を表示

フレームグラフを読むのは簡単ではありません

フレームグラフを読むのは簡単ではありません。練習が必要です。ですが、ちょっとしたコツもあります。ここではそれを紹介します。

フレームグラフやウォーターフォールチャートを呼ばれる種類の可視化を見ないで1日を過ごすことは、ほとんどありません。大抵はSpeedscopeやChrome DevToolsで、そういった可視化を目にしています。

著書の多くやワークショップの中でフレームグラフの読み方を教えていると、そこでつまづく人を見かけます。フレームグラフを読んで理解するのは、ある程度はスキルの話です。スキルを身につけるには、絶え間ない練習が必要です。

ただ、フレームグラフを読むスキルはサブスキルに分解できます。その場合に最も重要だと私が考えるのは、「どのフレームが重要で意味があるのかを判断できる」スキルです。

プロセスは、Xミリ秒ごとに停止します。停止されると、プロセスの現在のスタックが記録されます。例えば、フレームAはフレームBを呼び、フレームBはフレームCを呼び出すといった具合です。念のために言っておくと、実行スタックとは、例外のバックトレースを見るときなどに表示されているもののこ

元記事を表示

正規表現とmatch,subメソッド

# はじめに
正規表現を用いた任意の文字列のチェック方法やその他できることをまとめる。

## matchとsubメソッドについて
### subメソッド
subメソッドは、文字列の指定した部分を別の文字列に置き換えるためのメソッドです。
第1引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を指定します。また、操作したい文字列は/で囲みます。

【例】
irb(main):001:0> str = “りんごを食べる”
=> “りんごを食べる”

irb(main):002:0> str.sub(/りんご/,”みかん”)
=> “みかんを食べる”
「りんごを食べる」という文字列が「みかんを食べる」という文字列に置換されました。

### matchマッチ
matchメソッドは、引数に指定した文字列がメソッドを使用した文字列に含まれているか否かをチェックするためのメソッドです。含まれている場合は、指定した文字列がMatchDataというオブジェクトが戻り値で得られます。また、含まれていない場合は、戻り値としてnilが得られま

元記事を表示

バリデーションの記法と正規表現

# はじめに
バリデーションに用いる正規表現をまとめる。

## 正規表現
| パターン | 意味 |
| —- | —- |
| [a-z] | 角括弧で囲まれた文字のいずれか 1個にマッチ |
| \d | 数字にマッチ |
| {n, m} | 直前の文字が少なくともn回、多くてもm回出現するものにマッチ |
| {n} | 直前の文字がn回出現するものにマッチ |
| . | 改行以外のどの1文字にもマッチ |
| + | 直前の文字の1回以上の繰り返しにマッチ |
| \A | 直後の文字が先頭にある文字列にマッチ |
| \z | 直前の文字が末尾にある文字列にマッチ |
| [ぁ-んァ-ヶ一-龥々] | 角括弧に囲まれたかな、カナ、漢字のいずれかにマッチ(ヴ、ヵ、ヶ、々を含む) |
| ?= | 直後に設定した文字が続く文字列にマッチ |
| *? | 直前に設定した文字が0回以上続く文字列をチェックし、?の直後の文字が出た段階でその1文字を返す |
| \ | エスケープ文字と

元記事を表示

railsでJSONファイルの値を分割して受け取る

railsでひとつのJSONで二つのテーブル分のデータを受け取った際の処理を書く際に手間取ったのでメモ。
## 受け取るJSONファイル
“`json:event.json
{
“category_id”: 1,
“name”: “TestEvent”,
“is_public”: true,
“description”: “テストイベントです”,
“proposed_at”: [
“2022-11-14T18:15:45.087+09:00”,
“2022-11-14T19:16:45.087+09:00”,
“2022-11-14T18:52:09.671+09:00”
]
}
“`
イベントの名前だったりそのイベントの候補日のデータ

## コントローラー側の処理
“`ruby:event_controller.rb
def event_params
params.require(:event).permit(
:category_id,
:name,
:is_public,
:des

元記事を表示

while文

# はじめに
while文を勘違いして覚えてしまったため、改めて覚え直すために記事に残す。

## while文

while 条件式 do
実行する処理
end

条件式を満たす(true)間は処理が続く

元記事を表示

[Ruby] if、elseを用いた処理

# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 指定された範囲の数値によって処理が異なるプログラムの実装
以下の要件を満たす、parrot_troubleメソッドを実装していきます。

最近、あなたはオウムを飼いはじめました。しかし、近隣から「夜にオウムの鳴き声がうるさい」と苦情がくるようになりました。あなたはこれをシステムで解決しようと考え、次のようなプログラムの要件を考えました。

・第一引数にオウムが鳴く場合はtrueを指定し、鳴かないfalseを指定する
・第二引数には時間を指定する(ただし、「分」は考えないものとする)
・20時から翌朝7時までの間にオウムが鳴いた場合は「NG」と出力する(20時と7時は含まれない)
・上記以外の場合は「OK」と出力する

# 雛形
“`ruby
def parrot_trouble(talking,

元記事を表示

randメソッド

# はじめに
乱数の実装をする際に必要な知識を忘れないために記録に残す

## randメソッド
randメソッドで乱数を実装することができます。

# 使い方
rand(欲しい乱数の数)
randメソッドを使うと手軽に乱数を生成できます。randメソッドに引数として数を渡すと「0」から「渡した数 – 1」の間でランダムに数を返します。

rand(100) # => 0〜99の中から1つ整数をランダムに返す

rand(1..5) # => 1~5の中の整数を返す

元記事を表示

[Ruby]偶数値の取得するメソッドの作成

# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。
# even?メソッド
Rubyが元々用意しているメソッドで、対象の数値が偶数かどうか判断するメソッドになります。

“` even?.rb
10.even?
#=> true

5.even?
#=> false

“`
このように値が真の時、tureを返し、偽の時、falseを返します。
# 偶数値が取得できるメソッドの作成

“` even?.rb
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([2, 2, 0]) → 3
count_evens([1, 3, 5]) → 0
“`
このように出力できるメソッドを作成していきます。

“`even?.rb
def count_evens(nums)
count = 0
nums.each

元記事を表示

パスワードリセット機能の実装

# パスワードリセット機能の実装

## 実装
1完成イメージを掴む

http://localhost:3000/loginの「パスワードをお忘れの方はこちら」のリンク以降を実装
・config/routes.rbにリンクの追加

2リンクを押した後はパスワードリセット申請画面を表示
.controllerおよびviewの追加

3メールアドレスを入力して、送信すると、パスワード再発行メールを送信
.Mailerを追加
.ControllerでMailerを実行
.完了後はメッセージ付きでトップページにリダイレクト

4メールからパスワードリセット用のリンクに遷移
・config/routes.rbにリンクの追加
.controllerおよびviewの追加

5パスワードリセット用の画面でフォームにパスワードと確認用パスワードを入力して、更新するボタンを押すことでパスワードを変更
.Controllerの追加
.完了後はメッセージ付きでトップページにリダイレクト

6更新したパスワードでログインできることを確認

より詳しいな流れは[こちら](https://osamudaira.c

元記事を表示

railsチュートリアル中にHerokuの無料期間が終わることが分かり、Herokuからrender.comに気合いで移行した話

## 概要
タイトル通り
5章やってたら突然無料終わります言われて泣いちゃった
## 対応内容
下記様を参考にデプロイ手前まで作業完了。
[Render.comでRailsアプリの本番環境を作成する方法をどこよりも優しく伝える!](https://qiita.com/ysk91_engineer/items/b7db950f4739fa896f57)
[Render.com公式](https://render.com/docs/deploy-rails)

設定をしていくうち、`config/master.key`が必要とわかる。
その際、現在の`Gemfile`のrailsのバージョンではダメなことが分かり。
以下の様に`Gemfile`を設定変更
“`ruby
source ‘https://rubygems.org’

ruby “2.6.8” #念のためrender.comがこのバージョンの為、変更

gem ‘rails’, ‘= 6.0.3.2’ #updateしたら怒られたので怒られた通りに変更
gem ‘bootstrap-sass’, ‘3.3.7’

元記事を表示

Error: error:0308010C:digital envelope routines::unsupported の解決策

## 状況
“`
rails webpacker:compile
“`
このコマンドを実行しようとした。

## エラーログ
“`
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:140:10)
at module.exports (/Users/***********/Desktop/rails_tuning_sample_app/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/Users/***********/Desktop/rails_tuning_sample_app/node_modules/webpack/lib/NormalModule.js:417:16)
at handl

元記事を表示

ajax通信を用いて非同期でコメント機能を実装する

ほとんど私が書くことはないのですが、こことここの記事を参考にさせていただいたら簡単に実装できたよ!
ということで備忘録。
ajax通信を用いて非同期でコメント機能を実装するには、こちらの方のページが私にはとてもわかりやすかったです。(コメント欄も参考にされてください)
https://qiita.com/miyazaki_yusuke/items/dd1c053851a042cae893

そして、コメント欄も含めて余さず実行したけどうまくいかないぞ・・・?と思った時に、「そうだ!jQueryの実装してない!」となり外部検索でgemがあることを知り導入。けどうまくいかない。のでさらに検索したところ、こちらの方の記事で救われました。
https://qiita.com/tatsuhiko-nakayama/items/b2f0c77e794ca8c9bd74

素晴らしい方がたくさんいてよかった・・・
先人の方の知恵は偉大です。

元記事を表示

Active RecordでUNIONする方法

## はじめに
Active Recordでは `union` メソッドは提供されていません。ですが、運用上どうしても UNION したい場合はどうすればいいのか調査を行い培った知見をまとめます。

## 前提
* 以下の環境を利用します
* `Rails 7.0.3.1`
* `Active Record 7.0.3.1`

## UNIONする方法
1. `active_record_extended` gemを `bundle install` する
https://github.com/GeorgeKaraszi/ActiveRecordExtended

2. `active_record_extended` gem で提供されている `union` メソッドを利用する

以下のように簡単にUNIONのSQLが発行できます。

“`ruby
irb(main):001:0> Author.union(Author.where(id: 2), Author.where(name: ‘Yoko Sato’))
Author Load (3.6ms) SEL

元記事を表示

OTHERカテゴリの最新記事