- 1. Railsで画像を保存する際のassets配下とpublic配下の違い
- 2. VSCodeでRailsのCtrl+Clickで参照元にいけない
- 3. Railsのバリデーション – presence / allow_nil / allow_blank の違い・役割の整理
- 4. Rails – マイグレーションで既に作成済みのカラムのNULL制約をつける・外す時は change_column_null
- 5. 【PostgreSQL】テスト環境でのシーケンスの自動採番がリセットされない
- 6. Sporockets::FileNotFoundのエラー解決方法
- 7. 誤字監視システムをつくってみた (wordrabbit API)
- 8. Railsのキャッシュがいつ切れるかを確認したい
- 9. [Ruby] 委譲(def_delegators)を理解する
- 10. 【Ruby】case文をハッシュに変えたら少しだけ幸せになれた話
- 11. 診断機能(ポイント制)
- 12. Dockerを使ったrails apiモードの環境構築
- 13. Rails7 で TODOアプリを作ろう ⑨ (Enumや日時のバリデーション)
- 14. rubocop custom copの作成
- 15. Rails – Rspec の request のテストでファイルをアップロードする例
- 16. 【MySQL,Rails】アプリケーションの動作を改善したい(INDEX)
- 17. ルーティングは設定順も重要!!
- 18. [初学者] sorceryでユーザー登録、ログイン・ログアウト機能の作成
- 19. factory_bot_rails を 6.4.0 にしたら Rails アプリが起動しなくなった
- 20. 初めてGitHub Actionsを使ってRailsのRSpecを自動化したときの備忘録
Railsで画像を保存する際のassets配下とpublic配下の違い
# Railsで画像を保存する際のassets配下とpublic配下の違い
Railsアプリケーションにおけるアセット管理は、画像、スタイルシート、JavaScriptなどの静的ファイルを効率的に扱うための重要な部分です。特に画像ファイルの配置には、`assets`ディレクトリと`public`ディレクトリの2つの主要な選択肢があります。これらの違いを理解することは、Rails開発において重要です。この記事では、`assets`ディレクトリと`public`ディレクトリの特徴と使い分けについて詳しく解説します。
## assets配下に画像を保存する
### assetsディレクトリの役割
#### 概要
`assets`ディレクトリは、Railsアセットパイプラインの一部として機能します。アセットパイプラインは、JavaScriptファイル、スタイルシート、画像などのアセットを効率的に管理し、配信するための仕組みです。
#### 特徴
– **プリコンパイル**: `assets`ディレクトリに置かれた画像は、本番環境へのデプロイ時にプリコンパイルされます。これにより、
VSCodeでRailsのCtrl+Clickで参照元にいけない
# はじめに
仕事でRailsを最近書いているのですが、そこでこまったことをまとめておきます
# 問題
Railsを使っている上でモデルのメソッドなどにとびたいときがあります
そのときに**Ctrl + Click**で以前は参照元に飛んでいたのですが、いま拡張機能をいれてもその機能が使えませんでした# 解決方法
最新のRubyの拡張はその機能が使えなくなっているそうです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/4f6c2308-89ce-e438-c6bd-2ca324f8e55d.png)
少し前の**非推奨**のバージョンであれば利用できるのでそちらをインストールしました
**Ctrl + p**でコマンド`ext install rebornix.Ruby`を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/8fca6fc0-
Railsのバリデーション – presence / allow_nil / allow_blank の違い・役割の整理
# presence
値が空の場合にバリデーションエラーを起こす。
> presence
> このヘルパーは、指定された属性が空(empty)でないことを確認します。値がnilや空文字でない、つまり空でもなければホワイトスペースでもないことを確認するために、内部でObject#blank?メソッドを使っています。例:
“`rb
validates :foo_column, presence: true,
“`# allow_nil
値がnilの場合にバリデーションをスキップする。
例:
“`rb
validates :foo_column, format: { with: /REGEXP/ }, allow_nil: true
“`あくまで役割は「バリデーションのスキップ」なので、これを指定したからと言って値にNULLを許可するわけではない。
バリデーションを何も書かなければ、RailsのバリデーションとしてNULLは最初から許容される。つまり何もバリデーションを指定せずに `allow_nil: true` を指定しても意味がない。
(エラーが発
Rails – マイグレーションで既に作成済みのカラムのNULL制約をつける・外す時は change_column_null
# NULL制約を付ける場合
“`rb
class ExampleMigration < ActiveRecord::Migration[7.1] def change change_column_null :examples, :foo_column, true end end ``` # NULL制約を外す場合 ```rb class ExampleMigration < ActiveRecord::Migration[7.1] def change change_column_null :examples, :foo_column, false end end ``` # 注意 change_column だと null 制約以外も色々と書かないといけないのでよろしくなさそう ```rb change_column :examples, :foo_column, :string, :null => :false
“`# Railsガイド
Railsのマイグレーションは色々な種類があって何が推奨かのか分からなくなりがちだが、Ra
【PostgreSQL】テスト環境でのシーケンスの自動採番がリセットされない
## 発生した現象
RSpecでテスト実行後、普通はデータベースはリセットされてPKが1から採番されると思いますが、
何故かリセットされずテスト実行の度にPKがインクリメントしていくという現象が起きていました。—-
**[例]**
– 1回目のテストを実行し、Userのテストデータを5人分作成したらusersテーブルのidが1〜5まで生成される。
– 1回目を終え、2回目のテストを実行するとusersテーブルのidが6〜10が生成される。レコード自体は残っていない。—-
といった感じです。別にバグやエラーというわけではないですが、気持ち悪かったので解消しようと思い
一応解決したので備忘録として残します。## 環境
– Ruby 3.2.2
– Ruby on Rails 7.1.1
– PostgreSQL 15.3docker composeで環境構築しています。
## 原因
結論、特定はできませんでした。
(わかる方いらっしゃればコメントいただけますと幸いです)調べていてよく出てきたのは
「rails_helper.rbの`config.u
Sporockets::FileNotFoundのエラー解決方法
# Sporockets::FileNotFoundのエラー解決方法
Ruby on railsでアプリを作成中にエラーが出てきたので
原因と対処法を書いていきます。## なぜエラーが出たのか?
gemを導入してターミナルで
`bundle install`
を実行した後に
localhost:3000/
でブラウザを開こうとしたらエラーが出ました。## 対処法
ターミナルで
Ctrl+CでRailsサーバーを切り、再度`rails s`を実行する。gemをインストールした後は
サーバーの再起動を徹底します!
誤字監視システムをつくってみた (wordrabbit API)
おはようございます。[wordrabbit](https://wordrabbit.jp)の福澤です。各週水曜日に技術ブログを投稿していきます。今週もよろしくお願いします。
![wordrabbit_developmers.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72371/9450923a-dcfd-8878-4c13-0cb0581812ea.jpeg)
さて今日は、文章校正サービスである[wordrabbit](https://wordrabbit.jp)の非公開APIを使って、ウェブサイト全体の誤字を監視するシステムを作ってみたいと思います。
皆さん、多かれ少なかれ、ブログ記事やLP、サービスを公開したり修正したりした後に、誤字が見つかるという経験をしたことがあるのではないでしょうか?公開した直後ならまだよいのですが、公開数年を経て発見される誤字もあります。特に大きなサービスになると、この誤字を何年も放置してしまっていたのか……と冷や汗ものです。
そんなことを防げるサービスをつく
Railsのキャッシュがいつ切れるかを確認したい
Railsには重いクエリの結果や外部から取得したデータを一時的に保存するために、cache機能が用意されています。
たとえば以下のように記述することで、キャッシュストアの`hoge`キーに値が入っていればキャッシュストアの値を利用し、なければブロック内の処理を実行し、ブロックの返り値をキャッシュストアに保存する処理を行います。“`ruby
Rails.cache.fetch(‘hoge’, expires_in: 12.hours) do
# 保存したい値が返るように記述する
end
““## いつキャッシュが切れるか見たい
さて、上記のサンプルコードのように`expires_in`でキャッシュの時間を指定できるというのは有名ですが、今回は逆にキャッシュが切れる時刻を確認したいケースです。
キャッシュが切れる時刻を取得にするためには、以下のコードのように`Rails.cache.read_entry`を利用します。
“`ruby
# キーに値が入ってない場合nilが返るため、expires_atの前に `&`を書いている。
Rails.cache.send(:
[Ruby] 委譲(def_delegators)を理解する
Rubyには`def_delegators`というメソッド委譲と呼ばれる処理を行うためのクラスメソッドが定義されています。ちなみに、RailsのActiveSupportにも`delegate`という同じようなメソッドがあります。
メソッド委譲を使うと、クラス外で定義されているメソッドを、あたかもインスタンスメソッドのように呼び出すことができるようになります。
“`ruby
class Person
attr_accessor :name
attr_accessor :age
endclass Staff
attr_accessor :person
def_delegators :person, :name, :age
endp = Person.new
p.name = “Taro”
p.age = 20s = Staff.new
s.person = ppp s.name # => Taro
“`## コードリーディング
まずは、`delegate`メソッドは次のように定義されています。
“`ruby:forward
【Ruby】case文をハッシュに変えたら少しだけ幸せになれた話
## はじめに
どうもこんにちはもきお([@mokio_50](https://twitter.com/mokio_50))です。今回は実務で「おっ、これいいじゃん」と思ったちょっとしたリファクタリングになります。例として今回は東海オンエアのメンバーからメンバーカラーを返すと言うのを例にしました。
## if文をcase文に
一番条件分岐でオーソドックスなif文で書くと
“`ruby:
member = “ゆめまる”if member == “てつや”
“オレンジ”
elsif member == “りょう”
“ブルー”
elsif member == “しばゆー”
“イエロー”
elsif member == “ゆめまる”
“ピンク”
elsif member == “虫眼鏡”
“ブラウン”
elsif member == “としみつ”
“グリーン”
end
“`
今回は`ゆめまる`なので`ピンク`が表示されるでしょう。続いてcase文を用いて書くと
“`ruby:
member = “ゆめまる”case member
when
診断機能(ポイント制)
Ruby on Rails でポイント制の診断機能を実装する。
おすすめのキャラクターの診断ができる機能を実装する。## 開発環境
– Ruby3.0.6## 診断設計
Question1からQuestion3に対して「はい」→キャプテンアメリカに+1
Question4からQuestion6に対して「はい」→アイアンマンに+1
Question7からQuestion9に対して「はい」→スパイダーマンに+1
Question10からQuestion12に対して「はい」→ソーに+1
計12問の「はい/いいえ」の質問に回答すると、「はい」の数が最も多いキャラクターが表示される。## 手順
1. モデル
2. ルーティング
3. コントローラー
4. ビュー## 1. モデル
question1からquestion12の計12個(データ型がinteger)のカラムを持つTestモデルを作成する。
“`cmd
rails g model Test question1:integer question2:integer …
“`“`cmd
rails db:migr
Dockerを使ったrails apiモードの環境構築
## はじめに
Dockerを使ってrails apiモードの環境構築を行います。## 環境
`ruby 3.2.2`
`rails 6.1.0`## 作業ディレクトリ作成
はじめに作業ディレクトリを作成して`Dockerfile`と`docker-compose.yml`を作成します。“`terminal
mkdier app
“`railsコンテナはAPIとして運用するのでapi、データベースのコンテナ名はdbとしました。
“`docker-compose.yml
version: ‘3’
services:
db:
api:
“`## rubyインストール
いきなりrailsをインストールするのではなくapiコンテナにrubyをインストールします。“`Dockerfile:Dockerfile
FROM ruby:3.2.2RUN apt-get update -qq && apt-get install -y vim
WORKDIR /app
“`docker-composeも編集しましょう。
“`docker-com
Rails7 で TODOアプリを作ろう ⑨ (Enumや日時のバリデーション)
## はじめに
### 前回は
#### バリデーションメッセージのテンプレート化 として
https://qiita.com/tomoaki-kimura/items/57eb705ceeb228161fe6
– コンソール
– バリデーション
– errors
– バリデーションメッセージについて学びました。
### 今回は
#### Enumや日時のバリデーション として
– Enumのバリデーション
– カスタムバリデーション
– 日時のバリデーション
– タイムゾーンについて学びます。
では、はじめていきましょう。
## 1. バリデーションヘルパー
### ヘルパー一覧
バリデーションに関しては、かなりの項目数になるので、一度Railsガイドに目を通してみると良いでしょう。
https://railsguides.jp/active_record_validations.html
今回は、Rails7以降で追加された便利なバリデーションを含めてやっていきましょう。
## 2. Enumのバリデーション
### validate: tru
rubocop custom copの作成
## 背景
`Time.zone.now`を`Time.current`に変更したため、ついにルールとしてRuboCopに追加しました。## 環境
“`
❯ ./bin/rails –version
Rails 7.1.1❯ bundle exec rubocop –version
1.57.2
“`## Custom Copを追加
– lib/custom_cops/ban_time_zone_now.rb### install parser ([AST用](https://docs.rubocop.org/rubocop/development.html#basics))
“`
❯ gem install parser
Fetching ast-2.4.2.gem
Fetching parser-3.2.2.4.gem
Successfully installed ast-2.4.2
Successfully installed parser-3.2.2.4
Parsing documentation for ast-2.4.2
Installing ri
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用の設定ファイルと関連するファイルを生成
必要なファイルをプロジェクトに追加し、設定をカスタマイズできるようにする。
“`ruby
rails g s
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