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

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

rails console -e test

# テスト環境のコンソールを使えるようにする
“`
rails console -e test
“`
テスト環境のデータベースにレコードを生成したりすることができた。

# 出典
https://teratail.com/questions/289185#:~:text=1-,rails%20c%20%2De%20test,-%E3%81%A7%E8%A9%A6%E3%81%97%E3%81%A6

https://railsdoc.com/page/rails_console

# 感想
railsのドキュメントに書いてあったけどできなかった。
バージョンが違うからなのかはわからないができてよかった。

元記事を表示

Sidekiq v7.3に導入されたSidekiq::IterableJobについて

## はじめに

Sidekiq v7.3に `Sidekiq::IterableJob` と呼ばれる機能が導入されました。長時間実行されるジョブが安全にデプロイできるようになったとのことです。

* [sidekiq/Changes.md 7.3.0 at main · sidekiq/sidekiq](https://github.com/sidekiq/sidekiq/blob/main/Changes.md#730)

本記事では `Sidekiq::IterableJob` に関連するWiki/Mike Perhams氏の記事/実装を参考に調査を行い、分かったことをまとめます。

## 参考資料

* [Iteration · sidekiq/sidekiq Wiki](https://github.com/sidekiq/sidekiq/wiki/Iteration)
* [Iteration and Sidekiq 7.3.0 | Mike Perham](https://www.mikeperham.com/2024/07/03/iteration-and-sideki

元記事を表示

associationをキャッシュした場合の速度

## はじめに
N+1はパフォーマンスに影響することは知っていると思います。
ただ、パフォーマンスに影響するということはわかっても具体的にどれくらいの差があるのかを数値で見る機会は、なかなかったので、キャッシュしないものとキャッシュするものを比較してみたいと思います。

## テーブル関係
親usersテーブル、子postsテーブルを用意します。
“`rb:app/models/user.rb
class User < ApplicationRecord has_many :posts, dependent: :destroy end ``` ```rb:app/models/post.rb class Post < ApplicationRecord belongs_to :user end ``` ## seedの用意 以下のようなseedデータを用意します。データの件数は1000件です。 ```rb:db/seeds.rb 1000.times do |n| user = User.create!( name: "山田 太郎", email: "s

元記事を表示

【Rails】ArgumentError (Unrecognized status code :request_entity_too_large)

## はじめに
Rails7にアップデート中、request_entity_too_largeを使用している部分でエラーが発生したので、解消方法をまとめていきます。

## 問題
コード
“`ruby
render body: nil, status: :request_entity_too_large
“`

エラー内容
“`ruby
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms | Allocations: 984)

ArgumentError (Unrecognized status code :request_entity_too_large):
“`

## 解決方法
Rails4.2からrequest_entity_too_largeはpayload_too_largeに変更されています。
request_entity_too_largeを使用している部分をpayload_too_largeに変更することで解消します。
“`ruby
render body: nil, status

元記事を表示

Rails7.2の新機能と変更点をまとめる【前編】

Rails7.2がbetaフェーズとなっています。

リリースに先立ち、新機能や変更点などをまとめつつ、実際に検証してみました。

## devcontainer
Rails7.2ではVSCode上で使えるdevcontainerを設定する機能が追加されました。

`rails new`を実行する際に`–devcontainer`オプションを付与できるようになっています。

また`devcontainer`コマンドを実行すれば、既存のRailsアプリケーションでも開発用コンテナの設定が可能です。

以下のIssueで導入の議論がされていました。

https://github.com/rails/rails/issues/50566

### 実際にやってみた
Rails7.1には`devcontainer`コマンドが存在しないのでエラーとなります。
“`bash
rails7.1-app % rails devcontainer
Unrecognized command “devcontainer” (Rails::Command::UnrecognizedCommandErro

元記事を表示

HTML,CSS,Ruby,Railsなどの参考資料まとめ(自分用)

HTML

HTML辞典

→HTMLのデジタル辞書。わからなくなったらここから引く。

https://html-coding.co.jp/annex/dictionary/html/

CSS

・CSS辞典

→CSSのデジタル辞書。わからなくなったらここから引く。

https://html-coding.co.jp/annex/dictionary/css/

https://www.tagindex.com/stylesheet/properties/

Rails

・Railsガイド

→Railsのデジタル辞書。わからなくなったらここから引く。

https://railsguides.jp/

元記事を表示

リダイレクト先をテストする

“`ruby
require “rails_helper”

RSpec.describe UsersController,type: :controller do
describe “create user transition page” do
it “assigns @user” do
post :create, :params => {:name => “hogehoge”, :email => “gehogeho”}
expect(response).to redirect_to(:action => ‘show’,id: assigns(:user).id)
end

it “not assigns @user” do
post :create, :params => {:name => “”, :email => “”}
expect(response).to redirect_to(:action => ‘new’)
end
end
end
“`

render_template

元記事を表示

RailsAPIを使ったSPA構成でのログイン機能を実装する際のブラウザセッション保持

# はじめに
この記事ではRailsAPIを使ったSPA構成(今回はNext.js)でのログイン機能を実装する際のブラウザセッション保持について話します。
Railsチュートリアルで作成したログイン機能をRailsAPIを使ったSPA構成へ変更する際に役立つかと思います。

Railsチュートリアルで作成したsessions.rbやヘルパーを持ち越してRailsAPIを使用すると、僕の場合は普通の開発環境でのPC環境と本番環境でのスマホ環境では問題なくログインができるのに、シークレットモードのPC開発環境ではログインができず、本番環境のPCからもログイン機能が使えないという不思議な事態に陥っていました。
しかも、関係あるコードにログ出力コードを付与してRailsログを見ると、ログインが成功しているのにその後のログイン必須のデータ取得ができていないという事態に陥りました。つまり、ログインが成功しているというログが出るのに、すぐその後にログインしていないのでデータが取得できないというログが現れるという不思議な状態です。

これはログインが成功しているが、セッションが保存されないために起きて

元記事を表示

【個人開発】釣り具の登録、管理、検索ができるアプリを開発しました🎣

# はじめに
こんにちは![レイ](https://twitter.com/ida09r)と申します!

未経験からエンジニア目指して日々学習をしております。

今回、釣り道具に特化した「[Tackle Master(タックルマスター)](https://tacklemaster.net/)」というサービスを開発しました。

釣りに興味のある方や好きな方には、ぜひ使っていただけると嬉しいです。

### 自己紹介

地元の工業高校で情報系コースを専攻し、PC操作やプログラミング(Python、SQL、HTML/CSS)を簡単に学びました。
卒業後は総合化学品メーカーで製造オペレーターとして約3年間勤務。その際、社内ITシステムに助けられた経験から、システム開発に興味を持ちました。

2024年2月からプログラミングスクール「RUNTEQ」に入学し、エンジニアを目指しています。

# 1.サービス紹介

「Tackle Master」は釣り道具に特化したサービスで、釣り道具の管理・登録・検索ができます。

![tackle_service.jpg](https://qiita-image

元記事を表示

Ruby: any?メソッドについて

補足 2024 07/19
@scivolaさんよりご指摘いただいた内容を反映

## 読んで欲しい人

– any?メソッドがわからん人
– 過去の俺

## 動作環境

– ruby 3.3.0

## any?メソッドとは

– 配列やハッシュなどのコレクションに対して使用する
– ~~要素内に1つでもtrueを見つければtrueを返す。全ての要素がfalseならfalseを返す~~
– 1 つでも真な要素があれば true を返す。全ての要素が偽なら false を返す

“`ruby
[nil, false, nil, false, true].any?
=> true
“`

– ブロックで条件を指定できる

“`ruby
[1, 2, 3].any? { |v| v > 3 }
=> false
“`

*追記: 2024/07/19*
– 全ての要素が偽というのは、要素がない場合にも成り立つ

“`ruby
[].any?
=> false
“`

## なんで配列、ハッシュの要素1つ1つをチェックできるのか?

`any?`はEnumerableモジュール

元記事を表示

実機テスト@Xcodeでエラー「Please reinstall cocoapods with `bundle exec pod install`」が発生した時の対処法

## 背景
iPhone7@Xcode14.3.1で実機テストを実施しようとした(再生ボタンをクリックした)ところ、「Please reinstall cocoapods with `bundle exec pod install`」というエラーが発生しました。エラーの対処方法を紹介します。

## 環境
macOS Monterey:12.1
Ruby:3.0.6
Rails:6.1.0
React Native:^0.74.3
expo SDK:~51.0.20
bundler:2.5.3、2.4.13(default:2.4.13)
node:16.20.0
npm:8.19.4
yarn:1.22.19
webpack:4.46.0
※エディターは、VSCodeを使用しています。
※デプロイ先は、herokuです。

## 問題
・Xcodeのログに、以下のエラーが発生しました。
“`
Codegen did not run properly in your project. Please reinstall cocoapods with `bundle exec pod i

元記事を表示

deleteメソッドの戻り値は、最後に削除した要素の値である

Action Mailerを使って、アプリに登録されている全ユーザにメールを送信するという実装をしたのですが、メールが飛ばないというような事がありました。
実際のコードがこちらです!
“`ruby
@posts = Post.yesterday_liked_ranking_top_ten
mail(to: User.pluck(:email).delete(”), subject: default_i18n_subject)
# emailを登録していないユーザもいるので、空であれば削除する
“`
emailを登録していないユーザもいるので、pluckして取得した値のうち、空文字は削除するといった実装です。
この時点で既にお気づきの方もいらっしゃると思いますが、この記述だとmailのto引数には空を渡してしまうのです。

実際にコンソールで挙動を確認してみましょう!
“`ruby
>> emails = User.pluck(:email)
User Pluck (1.0ms) SELECT “users”.”email” FROM “users”
=> [“”, “”,

元記事を表示

RSpecでRailsのテストを書いてみる

# はじめに
Railsの自動テストを学ぶにあたって、RSpecでの実装方法を勉強したので書き残していく。
Ruby:3.2.1
Rails:7.1.2
# RSpec のセットアップ
gemの追加。`rspec-rails`をGemfileに追加する。
“`ruby:Gemfile
group :development, :test do
gem ‘rspec-rails’
end
“`
テスト用のデータベースを設計。今回はSQLiteを採用。
“`ruby:config/database.yml
test:
<<: *default database: db/test.sqlite3 ``` RSpecの基本的な設ファイルの追加。 ```shell-session $ rails generate rspec:install ``` ## テストの作成 モデル/ビュー/コントローラーでそれぞれテストを作成していく。 RSpecの基本的な書き方は以下。 ```ruby RSpec.describe User, type: :mode do it

元記事を表示

[Ruby] メール配信設定の処理における「大きな泥団子」を責務分離した上で、キャッシュ化した話

## 問題点
メール配信設定に関する機能についてです。

SendGrid では、メール配信を行うために (CNAME・ないし MX/TXT 形式の)DNS 登録・及び認証が必須となっており、その認証状態を確認するための [Domain Validation API](https://www.twilio.com/docs/sendgrid/api-reference/domain-authentication/validate-a-domain-authentication) が提供されています。

その DNS 認証を行うための処理をクラス化していたのですが、無関係の様々な処理(例えば「メール配信結果にまつわる情報取得など」)も役割を持たせられており、責務が肥大化し、いわゆる「大きな泥団子」と化していました。

その状態で過剰にリクエストされた結果、ある時 SendGrid API から Rate Limit 超過エラーを受け取るケースが発生しました。

## 分析
まず掲題の外部 API が許容している Rate Limit の詳細を確認しました。

公式ドキュメントを見ても詳細

元記事を表示

migrationで不整合を防ぐ

# はじめに
昨日コーディングインタビューにて「migrationファイルにおける不整合データの対策について」を問われた際にパッと答えることができなかったので、ここで供養していく。

# 問題
以下のようなテーブル定義のmigrationファイルがあった際、どのようにして不整合データの対策をしていくかといった内容。(以下Ruby on Railsのmigrationを例に)
“` ruby:
def up
create_table :follows do |t|
t.references :follow_to, foreign_key: { to_table: :users }
t.references :follow_by, foreign_key: { to_table: :users }
t.timestamps
end
end
“`
よくあるsnsのユーザーフォローの機能のテーブルをイメージしていただきたい。
followsテーブルとusersテーブルは1:Nの関係になっている。

## どんな不整合が起こりうるか

元記事を表示

devise 退会済みユーザー ログイン実行「すでにログインしています。」と出る件

# はじめに
ポートフォリオの最終チェックしていると、退会済みユーザーがログインできてしまうことが発覚😱
前まではちゃんとブロックできてたのに…
ということで解決したのでアウトプットしておきます✍️

# 現象

退会済みのユーザー情報でログインを実行するとこのようになります

![スクリーンショット 2024-07-17 16.13.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/385d0bf0-f709-8173-20d1-2e212d1c64b9.png)

“`sessions_controllre.rb
# frozen_string_literal: true

class Public::SessionsController < Devise::SessionsController before_action :user_status, only: [:create] : private # アクティブ判断メソッド def user_status

元記事を表示

Railsでhaml-rails gemをインストールしたのに新規生成されるviewファイルが全部erb拡張子になってた話

## 読んで欲しい人

– hamlをインストールしたのに、自動生成されるファイルの拡張子が全部.erbになって困っている人
– 過去の俺

## 動作環境

– Ruby 3.3.0
– Rails 7.1.3.4

## エラー内容

– gemfileにhaml-railsの記述があるのに、generateコマンドで生成されるviewファイルの拡張子が.erbになっている

“`ruby

# gemfileの中身

source ‘https://rubygems.org’

ruby ‘3.3.0’

gem ‘rails’, ‘~> 7.1.3’, ‘>= 7.1.3.2’

gem ‘bootsnap’, require: false
gem ‘pg’, ‘~> 1.1’
gem ‘puma’, ‘>= 5.0’
gem ‘sprockets-rails’
gem ‘stimulus-rails’
gem ‘turbo-rails’
gem ‘haml-rails’ #hamlを使用できるようにするgem
gem ‘html2haml’ #erbをhamlに変えてくれる

元記事を表示

Rspecを始めて行う

“`
bundle exec rspec spec/models
“`
このディレクトリ以下のテストを実行する

“`ruby
RSpec.describe User, type: :model do
context “with 2 or more comments” do
it “orders them in reverse chronologically” do
user = User.create!(:name => “hogehoge”, :email => “gehogeho”, :forign => 1)
expect(user).to eq(user)
end
end
end
“`
テストのコメントは出鱈目です。(後でやります)
“`ruby
expect(user).to eq(user)
“`
In RSpec, assertions are called expectations, and every expectation is built around a matcher. When you expec

元記事を表示

日にちの始まりを取得する方法

「前日に」いいねされた記事を取得するという実装をするために、日にちの始まりと終わりを簡単に取得する方法を調べたので、備忘録として残しておきます!
## 日にちの始まりを取得する方法
“`ruby
time = Time.current
=> Wed, 17 Jul 2024 13:58:08.985319000 JST +09:00
time.beginning_of_day
=> Wed, 17 Jul 2024 00:00:00.000000000 JST +09:00
“`
他にも日にちを取得する便利なメソッドが多数用意されていました。
“`ruby
# 日にちの終わりを取得する
>> time.end_of_day
=> Wed, 17 Jul 2024 23:59:59.999999999 JST +09:00

# 日にちの年の始まりを取得する
>> time.beginning_of_year
=> Mon, 01 Jan 2024 00:00:00.000000000 JST +09:00

# 日にちの週の始まりを取得する
>> time.beginning_o

元記事を表示

Javascriptでバリデーションを実装

# はじめに
前回に引き続きbootstrapのモーダル機能で新規登録・ログインフォームを作成方法をアウトプットします✍️

https://qiita.com/3rarara/items/6450603f2ea29f5d7793

初心者ですので、もっといい方法があるよ!
等ございましたらご教示いただけますと幸いです!

# 開発環境
– ruby: 3.1.2
– Rails: 6.1.7.7
– Cloud9
– bootstrap: 4.6.2

# 前提条件
– bootstrap4.6.2 導入済み
– devise 導入済み

# Javascriptでバリデーションを実装
新規登録やログインにエラーが発生した時、
deviseの使用上元の(モーダルでない)新規登録ページやログインページに飛んでしまいます
ログインを非同期で行うことも試みましたが挫折しました…
なので、今回はJavascriptで簡単なバリデーションをつけていきたいと思います
コード全体だけ見たいよ〜という方はこちらをクリックしてください↓

Javascriptコード

元記事を表示

OTHERカテゴリの最新記事