- 1. Rails – Rspec の request のテストでファイルをアップロードする例
- 2. 【MySQL,Rails】アプリケーションの動作を改善したい(INDEX)
- 3. ルーティングは設定順も重要!!
- 4. sorceryでユーザー登録、ログイン・ログアウト機能の作成
- 5. factory_bot_rails を 6.4.0 にしたら Rails アプリが起動しなくなった
- 6. 初めてGitHub Actionsを使ってRailsのRSpecを自動化したときの備忘録
- 7. Ruby on Railsアップデート(Action Mailer/Active Storageの修正 他 2023-11-17)
- 8. Rails – トランザクションをネストするとロールバックが効かない
- 9. Railsコールバックのchanged?って?
- 10. 忘れないようにRailsのDB編集2
- 11. [Rails] routes.rbのresource, resourcesの違い
- 12. ローカル環境でrails newする際に -d postgresql オプションでエラーが出る際の対処法 & PostgreSQLのインストール【Rails 7, Mac OS】
- 13. 【Ruby on rails】Aws::S3::Errors::RequestTimeTooSkewed
- 14. Cloudinaryを使用し画像をアップロードした際に出てきた⚠️
- 15. 【Rails】開発/本番環境で違う初期データ(seeds.rb)を入れる、データの入れ直し方法など
- 16. railsにBootstrap導入後の表示が左寄り問題
- 17. 【Ruby】クラス定義についてサクッと解説!
- 18. Rails 7 でTODOアプリ ⑧ (バリデーションメッセージのテンプレート化)
- 19. 【Ruby】ブロックについてサクッと解説!
- 20. 【初学者】はじめてのDockerを使った環境構築【Docker + Rails7.1.2 + esbuild + Node.js 20.5.1 + Tailwind CSS + daisyUI + PostgreSQL】
Rails – Rspec の request のテストでファイルをアップロードする例
# コード例
“`rb
require ‘rails_helper’describe ‘post /example/’, type: :request do
subject { post ‘/example/’, params: }let(:params) do
{
file: fixture_file_upload(‘path/to/file’)
}
endit do
subject
expect(response).to have_http_status(:ok)
end
end“`
# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
【MySQL,Rails】アプリケーションの動作を改善したい(INDEX)
どうもこんにちは。
今回はRailsでデータベースにインデックスを貼る方法をまとめます。
# インデックスとは
インデックスは、データベース内のデータを迅速に検索するための構造です。データベースにおいて、特定の列(フィールド)に対してインデックスを作成することで、その列を使った検索やソートが高速になります。
# インデックスの構造
## データのポインター
インデックスは、実際のデータの場所を指し示すポインターの集まりです。これにより、データベースは全ての行を調べるのではなく、必要なデータを迅速に見つけることができます。
## 構造
多くのデータベースシステムでは、インデックスはB-Treeという特殊な木構造で作成されます。これにより、大量のデータの中からも効率的に検索が可能になります。
# インデックスの利点と欠点
## 利点
### 高速な検索
インデックスがあると、データベースは特定の値を持つ行を迅速に見つけることができます。
効率的なソートと集計: インデックスされた列を使ってデータをソートや集計する操作が高速になります。## 欠点
### 追加の
ルーティングは設定順も重要!!
## 設定順を意識しないとどうなったか?
「id」を含むルーティングを指定した後、「id」を含まないルーティングに合わせてURLを入力しアクセスしたが、本来と違うアクションが動いてしまい、違うViewページを表示してしまった。## ルーティングの設定順ミスによる事例
今回はProgateのRailsコースを例に、ルーティングの設定順を意識せずに指定するとどうなるかの事例を挙げてみました。“`routes.rb
Rails.application.routes.draw do
get “signup” => “users#new”
get “login” => “users#login_form”
post “login” => “users#login”
post “logout” => “users#logout”get “users/:id” => “users#show” ## idを含むルーティング
get “users/:id/edit” => “users#edit” ## idを含むルーティング
post “users/:i
sorceryでユーザー登録、ログイン・ログアウト機能の作成
初学者なので、学んだことを忘れないように備忘録として残しておこうと思います。
### sorceryとは?
SorceryはRuby on Railsで使用できる認証および認可のGemです。これを使用することで、ユーザー認証、パスワードリセット、ユーザー管理などの一般的な認証および認可機能をアプリケーションに簡単に統合できます。
### gemとは?
gem は、Rubyプログラミング言語の拡張機能やライブラリをパッケージ化したものです。
RubyGemsを使用することで、他の開発者が書いたRubyライブラリやアプリケーションを簡単にインストールできます。# sorceryの追加
gemファイルにsorceryを追加します
“`ruby
gem ‘sorcery’
“`
### gemの反映
bundle installで追加したgemファイルを反映します。
“`ruby
bundle install
“`
# sorceryのセットアップ
### Sorcery gem用の設定ファイルと関連するファイルを生成
必要なファイルをプロジェクトに追加し、設定をカスタマイズでき
factory_bot_rails を 6.4.0 にしたら Rails アプリが起動しなくなった
Rails 7.0.8 で開発中のウェブアプリで,factory_bot_rails のバージョンを 6.2.0 から 6.4.0 に上げたら Rails サーバーも Rails コンソールも動かなくなった。
`rails console` とやると以下のようなエラーが出て落ちる。
“`
(略)/railties-7.0.8/lib/rails.rb:47:in `configuration’: undefined method `config’ for nil:NilClass (NoMethodError)application.config
“`そのプロジェクトでは Gemfile で factory_bot_rails のバージョンをガチガチに固定してはおらず,当初は,factory_bot_rails のバージョンが変わったことが引き金になっているとは分からなかった。
認証系 gem の [sorcery](https://rubygems.org/gems/sorcery) を使っていたが,いろいろ試しているうち,Gemfile から sorc
初めてGitHub Actionsを使ってRailsのRSpecを自動化したときの備忘録
GitHub Actionsでpushをトリガーにrailsのrspecを起動させるコードを初めて作成したときの記録です。色々エラーが発生したので、メモしました。
## GitHub Actionsコード
“`
name: Run RSpecon:
push:jobs:
rspec:
name: RSpec Tests
runs-on: ubuntu-latestservices:
mysql:
image: mysql:8.0.31
ports:
– 3306:3306
env:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
options: –health-cmd “mysqladmin ping” –health-interval 10s –health-timeout 5s –health-retries 10steps:
– name: Checkout code
Ruby on Railsアップデート(Action Mailer/Active Storageの修正 他 2023-11-17)
## 引用元
https://world.hey.com/this.week.in.rails/action-mailer-bug-report-template-active-storage-fixes-and-more-6264430d## 今週のトピック
### [word_wrapが空文字列を返すように修正](https://github.com/rails/rails/pull/50069)
[word_wrap](https://railsdoc.com/page/word_wrap)(指定された長さ以降の空白に改行を入れて出力するメソッド)が空の文字列を与えられたときに、nilの代わりに空の文字列を返すように修正された。### [プレビュー処理時にバリアントを処理する](https://github.com/rails/rails/pull/50044)
[ActiveStorage::Preview#processed](https://api.rubyonrails.org/v7.0.8/classes/ActiveStorage/Preview.html)
Rails – トランザクションをネストするとロールバックが効かない
# 例
内側でロールバックを実行してもコミットされてしまうようだ
“`rb
p Example.countApplicationRecord.transaction do
ApplicationRecord.transaction do
Example.create
endraise ActiveRecord::Rollback
endp Example.count # カウントが増えてしまう
“`単純なコードであれば気づくが、コードが入り組んでいる場合は注意
# 外側の制御で回避
外側のトランザクションで `joinable: false` を指定すると、外側のトランザクションへの合流を防げるようだ
“`rb
p Example.countApplicationRecord.transaction(joinable: false) do
ApplicationRecord.transaction doExample.create
raise ActiveRecord::Rollback
end
end
Railsコールバックのchanged?って?
## きっかけ
「order_idが変わったらorder_statusの値を変更する」という実装でコールバックを使用した際に、
コールバックの挙動を理解できておらず躓いてしまったのでアウトプットとしてまとめてみました。## ケース1
コールバック発火しない
“`ruby:order.rb
enum status: {
unchecked: 0,
checked: 1,
error: 3
}after_update :order_status_reset, if: -> { order_id_changed? }
def order_status_reset
self.unchecked!
end
“`
### 原因
after_updateではorder_id_changed?に該当しない。after_saveも同様だが、changed?は
現在の値と変更しようとしている値を検証するもの。そのため、updateやsaveした後は
すでに変更しようとした値は保存されており、
changed?は発火しない
忘れないようにRailsのDB編集2
### すべてChatGPTより
`add_column` メソッドでカラムに `int` を指定する場合、`integer` データ型を使用します。これは通常、一般的な整数を表現するためのデータ型です。
具体的には、以下のように `add_column` を使って `integer` データ型を指定します。
“`ruby
class AddTaskToArchives < ActiveRecord::Migration[7.0] def change add_column :archives, :task_id, :integer, null: false add_foreign_key :archives, :tasks, column: :task_id end end ``` このコードでは、`:archives` テーブルに `:task_id` という名前の `integer` データ型のカラムを追加しています。そして、`add_foreign_key` メソッドを使用して `:archives` テーブルの `:task_id` カラムを
[Rails] routes.rbのresource, resourcesの違い
# 目的
現在携わっているRails のプロジェクトのroutes.rbで、名前が似ているresourceメソッド,resourcesメソッドが使用されていたので、その意味、違いについてまとめる。# resources
7つのアクション(index、show、new、create、edit、update、destroy)のルーティングを一括生成してくれるメソッド
例)
routes.rbに
“`routes.rb
Rails.application.routes.draw do
resources :users
end
“`
と書くと,
“`
$ rails routes
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(
ローカル環境でrails newする際に -d postgresql オプションでエラーが出る際の対処法 & PostgreSQLのインストール【Rails 7, Mac OS】
:::note warn
PostgreSQLがインストールされていないために発生するエラー対処の記事となります。PostgreSQLの使い方の記事ではありませんので、ご了承くださいませ。
:::## はじめに
Railsのハンズオンや環境構築資料でよく見かける以下の rails new コマンド。
“`zsh
$ rails new test_app -d postgresql# –database=postgresql と読み替えていただいて問題ありません。
“`データベースオプションである、`-d postgresql` を指定することで、Railsと同時にPostgreSQLのセットアップをすることができます。※デフォルトはsqlite3が指定される。
しかし、ローカル環境にPostgreSQL自体をインストールしていない場合、pg gem(PostgreSQLのRubyライブラリ)のインストール中にエラーが発生する可能性がありますので、以下備忘録として、手順を残したいと思い記事にしてみました。
※ 現在プログラミングスクールに通っております。カリキュラム
【Ruby on rails】Aws::S3::Errors::RequestTimeTooSkewed
# はじめに
プログラミングを勉強して3か月ほどです。
プログラミングスクールを卒業し、現在就職活動をしています。今回はオリジナルアプリにS3を導入した際に発生したエラーの対処法を共有したいと思います。
下記の記事を参考にさせていただきました。https://zenn.dev/karaage0703/articles/47838858dd3107
# 今回のエラー内容
今回のエラーはS3導入後に画像を保存しようとした際に発生しました。
エラーの内容は、リクエストを行うクライアントとリクエストを受信するサーバーとの間の時間のズレに問題があることを示します。
[![Image from Gyazo](https://i.gyazo.com/31f3193a16ea29a8075139fadf75fe4a.png)](https://gyazo.com/31f3193a16ea29a8075139fadf75fe4a)
このエラー原因としては大きく2つ挙げられます。
1つ目は、AWS側の地域設定に誤りがあり、時刻がズレてしまっている。
2つ目は、システムの時間が合っていない。
今回
Cloudinaryを使用し画像をアップロードした際に出てきた⚠️
[![Image from Gyazo](https://i.gyazo.com/57290ade50e032a6c71fc37d9da80362.png)](https://gyazo.com/57290ade50e032a6c71fc37d9da80362)
[![Image from Gyazo](https://i.gyazo.com/4374e5eebd3e620466b7dfe9e67b0983.png)](https://gyazo.com/4374e5eebd3e620466b7dfe9e67b0983)
この警告は「混合コンテンツ」と呼ばれるもので、HTTPSページがHTTPリソースを読み込んでいることを示しているそうです。ブラウザはこのような状況でセキュリティの観点から警告を発していました。## 原因
cloudinaryからの画像がHTTPでリクエストされていることが問題でした。“`ruby:cloudinary.yml
—
development:
cloud_name: <%= ENV['CLOUDINARY_CLOUD_NAME'] %
【Rails】開発/本番環境で違う初期データ(seeds.rb)を入れる、データの入れ直し方法など
# はじめに
初のオリアプ開発で、開発環境でユーザー等のテスト用の初期データを大量に生成する必要があったのと、本番環境でもデモ用初期データを手動追加するのが面倒なので、何かいい方法はないかと考えてました。
というのも、私の今作っているアプリは複数のユーザーモデルやメインとなるデータモデルを前提としている機能が多いんですよね。
調べたらseed.rbを活用すると初期データを入れられるとのことで、ではやってみよう!となったのです。## 前提
– Ruby 3.2.0
– Rails 7.0.8
– 本番環境はRender
– Renderにて既にデプロイが出来ていること# seeds.rbファイルとは?
データベースに初期データを設定するために使用されるファイルです。
このファイルに記述されたコードは、rails db:seedコマンドを実行することで実行され、指定されたデータがデータベースに追加されます。# ディレクトリ構造
元々は以下のようになっていると思います。
“`
db
├── migrate
├── seeds.rb
└── schema.rb
railsにBootstrap導入後の表示が左寄り問題
# 左寄せになっているのを治す方法
Bootstrap導入直後の、
app>views>layouts>application.html.erb“`rails
MyCloset
<%= csrf_meta_tags %>
<%= csp_meta_tag %><%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
<%= yield %>
“`この時 bodyに直接書き込まれているのが左寄せになる原因です。
(左寄せしたい人は直接記入が良いみたいです)yiel
【Ruby】クラス定義についてサクッと解説!
## 内容
Rubyにおけるクラス定義はオブジェクト指向プログラミングの核心部分です。この記事では、基本的なクラス定義から継承、クラス式の評価順序に至るまでを掘り下げていきます。
### 基本のクラス型
“`ruby
class Foo
def initialize(a)
@a = a
enddef method1
@a
end
endfoo1 = Foo.new(1)
foo2 = Foo.new(2)
p foo1.method1 # 出力: 1
p foo2.method1 # 出力: 2
“``initialize` メソッドではインスタンス変数 `@a` に引数 `a` を代入しており、`method1` ではこのインスタンス変数を返すように定義されています。
#### クラスへの代入
“`ruby
a = Foo
b = a.new(1)
p b.method1 # 出力: 1
“`クラス自体もオブジェクトであり、変数に代入して操作することができます。
### クラス式の評価順序
“`ruby
p 1
Rails 7 でTODOアプリ ⑧ (バリデーションメッセージのテンプレート化)
## はじめに
### 前回は
#### Deviseのビューをカスタム・フラッシュメッセージ として
https://qiita.com/tomoaki-kimura/items/7417b23f25db370ca619
– Deviseのビュー
– Bootstrapの適用
– フラッシュメッセージについて学びました。
### 今回は
#### バリデーションメッセージのテンプレート化 として
– Railsコンソール
– バリデーション
– errors
– バリデーションメッセージについて学びます。
では、はじめていきましょう。
## 1. コンソールを使ってみる
最初にちょっと脱線します。
### rails c
ロジックの検証に是非とも使いたいのが、Railsコンソールです。
モデルのロジックやDBの接続も可能なので、データーの入力や削除にも使えますし、クエリの結果を調べたりもできます。
最近では使えるメソッドの候補等も表示されてとても親切なツールになりました。
では、早速ターミナルから作業を始めます。
一旦データーを初期状態に戻した
【Ruby】ブロックについてサクッと解説!
## 内容
Rubyのブロックは、コードの一部をカプセル化し、再利用可能にする強力な機能です。この記事では、ブロックの基本的な使い方から、スコープの生成、クロージャの使用に至るまでを掘り下げていきます。### ブロックとは何か?
#### 基本的なブロックの使用
“`ruby
def func x
x + yield
end
p func(1){ 2 } # 出力: 3
“`
この例では、`{}` で囲まれた部分がブロックであり、`yield` を使用してその中身を実行しています。### ブロックによるスコープの生成
“`ruby
def func y
y + yield
end
func(1) do
x = 2
end
# 「p x」を実行するとNameErrorが発生
“`
ブロック内で定義された変数は、そのブロックの外部からはアクセスできないことを示しています。`{}` と `do…end` はどちらもブロックを生成しますが、一般的に一行で書ける場合は `{}` を、複数行にわたる場合は `do…end` を使用します。### ブロッ
【初学者】はじめてのDockerを使った環境構築【Docker + Rails7.1.2 + esbuild + Node.js 20.5.1 + Tailwind CSS + daisyUI + PostgreSQL】
# はじめに
お疲れさまです!
おおくまです!今回、はじめて“Docker“を使って環境構築をやってみました!
技術選定としては、
**Docker + Rails7.1.2 + esbuild + Node.js 20.5.1 + Tailwind CSS + daisyUI + PostgreSQL**
こんな感じです!
また、サーバーを立ち上げる際は、
“./bin/dev“のコマンドを使い、
**JSやCSSがビルドされ、なおかつJSやCSSを変更したときに自動的に再ビルドされる**ようにします!
備忘録として残したいと思います!# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::# 環境
:::note
Ruby 3.2.2
Rails 7.1.2
Node.js 20.5.1
Docker Desktopをインストール済み
:::# 手順
“`:ターミナル
mkdir test_app
cd test_app
touch Dockerfi