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

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

【minitest】 request.refererを使用する方法

# はじめに
最近`request.referer`という便利なものがあることを知り、使用する機会がありました。
ですが、minitestを書いている際にリファラを用いたアクションのテストがうまくいかず少し苦戦してしまったため、備忘録を兼ねてここに残しておこうと思います。

# そもそもrequest.refererってなに?
リクエストヘッダーが持っている情報の一つであり、遷移前のURLを取得することができます。

そのため、`request.referer`を活用することで、
– どのページからの流入なのかアクセス解析ができる
– 遷移元のURLに戻りたい時にリダイレクト先として使用できる

といったメリットがあります。

今回は後者のように、`request.referer`をリダイレクト先として使用した時の、minitestの書き方について考えます。

# minitestでのrequest.referer
ここでは`request.referer`を使用して、遷移元のURLに再度リダイレクトするようなアクションのテストを作成することを考えます。

“`rb
# get

元記事を表示

【Rails】ポリモーフィックが便利〜

どうもこんにちは。

今回はポリモーフィックについてまとめます。

# ポリモーフィックってなんぞや?

ポリモーフィックとは、複数のモデル同士の関連付けの考え方です。

この考え方は、異なるモデルを単一の関連で扱う機能です。

例えば、以下のようにテーブルが存在しているとします。

commentsテーブル
| カラム名 | 型 | 値1 | 値2 | 値3 |
| — | — | — | — | — |
| id | integer | 1 | 2 | 3 |
| comment | text | ワンちゃんかわいい!! | よろしくお願いします。 | この時期寒くね? |
| article_id | integer | null | 1 | null |
| photo_id | integer | 2 | null | null |
| tweet_id | integer | null | null | 1 |

articlesテーブル
| カラム名 | 型 | 値1 | 値2 |
| — | — | — | — |
| id | in

元記事を表示

【Rails】rails db: から始まるコマンドまとめ

どうもこんにちは。

今回はRails開発で使う`rails db:`から始まるコマンドをまとめてみました。

# データベース作成

以下のコマンドでアプリケーションで使用するためのデータベースを作成します。

“`
$ rails db:create
“`

# データベース削除

以下のコマンドでアプリケーションで使用していたデータベースを削除します。(データやテーブル、カラムなどが全て消えます。)

“`
$ rails db:drop
“`

# データベースを最新にする

以下のコマンドでデータベーススキーマの状態を最新の状態にします。

“`
$ rails db:migrate
“`

マイグレーションファイルは以下のコマンドで生成します。

“`
rails g migration AddAgeToUserModel
“`

生成されるマイグレーションファイルは以下のようになります。

“`ruby
class AddAgeToUserModel < ActiveRecord::Migration[6.0] def change

元記事を表示

MySQL で複数種類の複合ユニーク制約をつける (NULLも許容) (+Railsのマイグレーション例)

# 概要

知らなかったが MySQL で複合キーのユニーク制約を付けた場合、nullのあるカラムは許容してくれるみたいだ。

たとえば `column_1` と `column_2` で複合ユニーク制約のあるテーブルで、 以下2個のレコードを追加した場合、 ユニーク制約に引っ掛かりそうだが許容してくれる

“`
column_1の値: AAA
column_2の値: NULL
“`

“`
column_1の値: AAA
column_2の値: NULL
“`

こうすると例えば、1テーブルで複数の複合ユニーク制約があっても、問題なく扱うことが出来る

たとえば `column_1 / column_2` の組み合わせと `column_3 / column_4` の組み合わせでそれぞれ複合ユニーク制約がある場合、片方の組み合わせはNULLでも問題なくなるのだ

“`
column_1の値: NULL
column_2の値: NULL
column_3の値: YES
column_4の値: YES
“`

“`
column_1の値: NULL
column_2の値

元記事を表示

【Rails】同じグループのアクションのルーティングをネストと非ネストに分ける

# はじめに
オリアプに関して、実装時に考えていたことを忘れないように頭の整理目的で書き残したいと思います。
実装途中の話を公開しますので、見た人がわかるような文章構成になっていない可能性があります(全部語ると長くなり、本来のメイン目的である頭の整理に沿わないため)。
結論だけ知りたい方は「解決方法」だけ見ればOKです。
また、必ずしも時系列ではないです。

# 自分のこと
先日プログラミングスクールを卒業して現在転職活動中です。
プログラミング未経験の状態からプログラミングスクールに通い始めました。
転職活動と同時並行でオリジナルアプリの開発をしています。

# オリジナルアプリについて
マンション管理アプリを作成しています。
メイン機能としては分譲マンションの管理会社が社内で使用する(想定の)業務アプリです。
サブ機能として、マンション住民も一部の機能にアクセスできるようにしています。
## アプリのコンセプト
これを知らないと、この人は何をそんなにこねくり回しているんだとなりそうなので、このアプリのポイントを2つ挙げます。
### ・複数のユーザーモデルが存在する

元記事を表示

【Rails】Google mapのマーカー(ピン)をカスタマイズして遊んでみた

## はじめに
こんにちは。[kosukein38](https://twitter.com/kosukein38)です。
最近仕事でGoogle map API(`Maps JavaScript API`)を使っていました。
後学も兼ねて、マーカー(ピン📍)を色々カスタマイズして遊んでみました🥳
自分は”ピン”を立てるとかってよくいうのですが、公式に習って、本記事では”マーカー”と呼ぶことにします。
徐々にステップアップする感じで書いてみたので、良かったら参考にしていただけたら幸いです。

## この記事の対象者

– Google map API(`Maps JavaScript API`)を初めて触る方
– RailsアプリにGoogle mapを組み込んで、あれこれ情報を表示したい方

## 内容(この記事でやること、やらないこと)

### やること
– Google map API(`Maps JavaScript API`)をRailsに導入する
– 地図を描画する
– 地図にマーカーを立てる
– マーカーの見た目を変える
– マーカーに吹き出しをつける + マーカーク

元記事を表示

【Rails】Renderにデプロイしたらビルドエラーが起こった

# 概要
Railsチュートリアルの第7章を進めていた時、
TLSと本番環境用の設定をRenderにデプロイしたときにビルドエラーが発生しました。

“`
ActiveRecord::ConnectionNotEstablished: could not translate host name “****” to address: Name or service not known

Caused by:
PG::ConnectionBad: could not translate host name “****” to address: Name or service not known

Tasks: TOP => db:migrate
(See full trace by running task with –trace)
==> Build failed 😞
“`

# 結論(解決策)
PostgreSQLのリージョンをシンガポールからオレゴンに変更した

# 試したこと
## PostgreSQLのVersionを15に変更する
Railsチュートリアルが更新された

元記事を表示

Railsでフォームから送付された画像をpublicフォルダに保存する方法

# Railsでフォームから送付された画像をpublicフォルダに保存する方法

Railsを用いてWebアプリケーションを構築する際、フォームからアップロードされた画像をサーバー上に保存する必要があることがよくあります。本記事では、フォームから送付された画像をpublicフォルダに保存する方法について詳しく解説します。この方法は、特に画像の名前をユーザーのIDに基づいて管理したい場合に有用です。

## 画像ファイル名の保存と変更

### 画像ファイル名の設定

まず、ユーザーに関連付けられた画像ファイルの名前を設定します。これは、ユーザーのレコードが作成された後、そのIDを使用して行います。

#### イメージ名の生成

“`ruby
@user.image_name = “#{@user.id}.jpg”
“`

上記のコードでは、ユーザーのIDを取得し、それをファイル名の一部として使用しています。これにより、各ユーザーにユニークな画像ファイル名が割り当てられます。

## フォームからの画像データの受け取り

### 画像データの取得

フォームから送信された画像データ

元記事を表示

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.3

docker 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
end

class Staff
attr_accessor :person
def_delegators :person, :name, :age
end

p = Person.new
p.name = “Taro”
p.age = 20

s = Staff.new
s.person = p

pp 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.2

RUN apt-get update -qq && apt-get install -y vim

WORKDIR /app
“`

docker-composeも編集しましょう。

“`docker-com

元記事を表示

OTHERカテゴリの最新記事