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

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

Railsマイグレーション: stringからtime型への変更と遭遇したエラーの解決法

Railsのマイグレーション機能を使用して、データベースのカラム型を変更することは一般的なタスクです。しかし、型変更が直面するエラーを解決する過程は、しばしば貴重な学びの機会となります。この記事では、`reservations`テーブルの`time_slot`カラムを`string`型から`time`型に変更しようとした際に直面した一連のエラーと、それらを解決した手法について共有します。

## ステップ1: 型の不一致

最初に、以下のマイグレーションを作成して実行しました。

“`ruby
class ChangeTimeSlotTypeInReservations < ActiveRecord::Migration[7.0] def change change_column :reservations, :time_slot, :time end end ``` この変更を試みたところ、以下のエラーが発生しました。 ```ruby PG::DatatypeMismatch: ERROR: column "time_slot" cannot be cast

元記事を表示

【開発実績】エンジニア向け就活マッチングサイト【Rails】

# はじめに
株式会社prezyのインターンにて、エンジニア向け就活マッチングサイトを開発した。
エンジニア3名で開発し、そのうち1人がフロント、2人がバックエンドを担当した。私の担当はバックエンドである。

# アプリの内容
## 企業紹介
企業は、自社の情報を登録できる。
業種や所在地、従業員数などの基本的な情報に加え、その企業が出している求人情報を登録できる。
求人情報は、詳細を登録することもでき、そこで詳しい業務内容などを記載できる。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626170/db943967-d436-1235-6293-7e0445ea91a2.png)

## 学生検索
企業は、条件で絞り込んで学生を検索できる。
条件には、
・希望業種 ・言語スキル
を指定できる。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626170/c6feede1-d6e7-488d-6c12-

元記事を表示

【個人開発】デスク環境を色彩の観点から改善する診断サービス

[![Image from Gyazo](https://i.gyazo.com/fc49f6cd971de73ee55f2ace90df1464.png)](https://gyazo.com/fc49f6cd971de73ee55f2ace90df1464)
# はじめに
こんにちは、佐々木と申します。
この度、プログラミングスクールにて学習する中で個人開発アプリを作成しました。
また、先日そのスクールも無事卒業することができましたので、書くと宣言して放置してた個人開発アプリの記事をようやく書きました。
仕事や勉強の息抜きの時とかに読んでみてください。

# 目次
1. Webアプリ紹介
2. 使用技術
3. こだわりポイント
4. 改善点
5. まとめ

# Webアプリ紹介
このサービスはデスク環境の写真を診断し、人間が作業する上で最適な環境になるよう色彩の観点から改善案を提案することでデスク環境改善のきっかけを提供します。

アプリURL(レスポンシブ対応済みですが、PC推奨)

https://desk-shikisai-shindan.com/

GitHub

http

元記事を表示

【Rails】gemの削除・バージョン変更方法

# 【Rails】gemの削除・バージョン変更方法
初めまして!

今回はgemの削除・バージョン変更方法についてです。
※自分は「bundler」を使っているので「bundle exec」を加えてのコマンド紹介になっています。
(bundleは、Rubyで使用されるGemの管理ツールです。)

### gemのアンインストール方法
“`
$ bundle exec gem uninstall 消したいgem名
“`
    ⬇︎
Gemfileから消したいgemを削除
    ⬇︎
“`
$ bundle install
“`
以上でGemfile.lockからも消えます。

・具体例(「sorcery」と言うgemを消す場合)
“`
$ bundle exec gem uninstall sorcery
“`
    ⬇︎
Gemfileから今回消したいgem = 「sorcery」 を削除
    ⬇︎
“`
$ bundle install
“`

### gemのバージョン変更方法
バージョン変更はまず上記で紹介したように元々ある「バージョンを変え

元記事を表示

既存Railsアプリをdocker化したらRSpec走らん問題【初学者向け】

既存のrailsアプリをdocker化するとローカルでエラーなく走っていた`RSpec`の`system spec`のテストが何一つまともに走ってくれず、修正した内容の備忘録となります。
どなたかのお力になれば嬉しいです。

:::note warn
プログラミング初学者なので、内容に誤り等ある可能性があります
誤りがありましたら教えてくださると幸いです
:::

環境
ruby 3.2.2
Ruby on Rails 7.0.8
Docker 24.0.2

# エラーその1
`docker compose run web bundle exec rspec`を実行すると
“`
1.1) Failure/Error: visit root_path

Selenium::WebDriver::Error::WebDriverError:
unable to connect to /root/.cache/selenium/chromedriver/linux64/122.0.6261.57/chromedriver

元記事を表示

Rspecで関数のモックをしているのに実行されてしまう

# はじめに
Rspecで2回同じところにハマったのでまとめます

# 問題

以下のようなテストを書きました

“`rb
require ‘spec_helper’

RSpec.describe sample do
describe ‘サンプルのテスト’ do

context ‘正しい引数が与えられた場合’ do
it ‘成功する’ do
params = {“hoge”=>”fuga”}
test.put_api(params)
expect(TestApi).to receive(:put_test).with(params.to_json).and_return(true)
end
end
end
end
“`

しかし実際にAPIを叩く関数をモックしているのになぜか実際にAPIを叩いてエラーになりました

# 解決方法

このような場合はモックとアサーションを兼任しているので、実際の呼び出し前にexpectを書く必要があります

“`rb
require ‘spec_he

元記事を表示

[Rails]ppでActiveRecordオブジェクトをログ出力すると一部消える!?

# 記事執筆に至る経緯
以下のように複数のテーブルをjoinし、特定のカラムを選択したActiveRecord::Relationオブジェクトの内容を確認しようとppを使ってログ出力してみました。

“`ruby
relation = Staff.joins(:division).merge(Division.where(division_id: 1)).select(:staff_name, :division_name)
pp relation
“`

すると以下のような結果に。

“`ruby
# [#]
“`

あれ、staff_nameしか出てきてない。取得できていないのか。。
いやでもデータは取得できてそう。。なんでや??
この状況で先輩に質問した時に教えてもらったのが.as_jsonでした。

“`ruby
pp relation.as_json
“`

このように書くと、以下のようにJSON形式できちんとselectした値が確認できる。

“`ruby
# [

元記事を表示

Ruby on Rails: 日付と時刻の処理に関する一般的な問題とその解決策

# 問題1

Ruby on Railsの開発において、日付や時刻の扱いはよく遭遇する課題です。特に、日付や時刻を扱うアプリケーションでは、文字列と`String`、`Date`、`DateTime`、`Time`オブジェクト間の変換が必要になる場合が多々あります。不適切な変換やフォーマットのミスマッチは、期待しない動作やエラーの原因となり得ます。

この記事では、具体的なエラーの事例を取り上げつつ、その原因と解決策について解説します。

## 事例と問題点

Railsアプリケーションにおいて、ユーザーからの入力を基にサービスの提供可能性を判断する機能を実装している際、以下のような`TypeError`が発生しました。

“`
TypeError: no implicit conversion of ActiveSupport::Duration into String
“`

このエラーは、文字列型の時刻データに対して`ActiveSupport::Duration`オブジェクトを加算しようとしたときに発生します。原因は、時刻を表す文字列(例: `”09:00″`)に、`Act

元記事を表示

【個人開発】テキストにコメントを追加するアプリ【Rails】

# はじめに
大学の研究室で、教授に論文を提出し、訂正していただくことがある。
そのようなとき、紙媒体で提出し、そこにコメントをいただいていた。
印刷するのは無駄だし、テキストにコメントをつけるアプリを作ろうと思い開発した。

# 概要
内容はシンプルで、ユーザーが行う操作は次の通りである。
1. 文章追加ページ(/texts/new) から添削したい文書を追加する。
1. 添削ページ(/texts/:id/edit) にアクセスする。
1. コメントを追加したい場所を選択し、右クリックする。
1. 表示されたコメント入力欄にコメントを追加し、追加ボタンを押す。
1. プレビューページ(/texts/:id) にアクセスし、プレビューする。
1. PDF作成ボタンをクリックし、PDF形式でダウンロードする。

コードは次のGitのレポジトリに記載している。
[Gitのレポジトリ](https://github.com/takiAtdu/comment-app)

# 実際の画面
## 文章追加ページ(/texts/new)
文章を入力するページは次のようなフォームにした。
テキストを

元記事を表示

サービス提供可能性の表示と予約リンクの動的生成(case when構文によるビューの動的生成)

Ruby on Rails: サービス提供可能性の表示と予約リンクの動的生成

## はじめに

この記事では、Ruby on Railsを使用して、特定の日に特定のサービスが提供可能かどうかを判断し、結果をユーザーに視覚的に表示する方法について解説します。さらに、サービスが提供可能な場合は、ユーザーが直接予約できるように予約ページへのリンクを動的に生成する方法も取り上げます。

## シナリオ

ある会社が複数のサービスを提供しており、それぞれのサービスには複数のスタッフが割り当てられています。スタッフは日ごとに異なるスケジュールで働き、サービス提供の可否はスタッフのスケジュールと提供可能なサービスに基づいています。

## 実装手順

### 1. コントローラーの設定

まず、指定された日に働くスタッフと、15分区切りの時間枠を生成するためのコントローラーアクションを設定します。

“`ruby
def for_customer_index
@date = params[:date].present? ? Date.parse(params[:date]) : Date.t

元記事を表示

omniauth_openid_connectのリダイレクト先でrequest.env[‘omniauth.auth’]がnilの解決法

## あれ

railsでomniauthとomniauth_openid_connectでCognitoの認証するぞ〜ってなってリダイレクト後の処理がはまったあれ

## 結論

なぜかrequest.env[‘omniauth.auth’]がnilになってしまたあなたへ
たぶんコールバックのURLが auth/:provider/callback ではない場合にこうなる模様

解決法として `callback_path` を追加する

“`ruby:config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
provider :openid_connect, {
issuer: “https://cognito-idp.リージョン.amazonaws.com/プールID”,
discovery: true,
scope: [:openid],
response_type: :code,
+ callback_pat

元記事を表示

【Rails】Bootstrap5系の画面遷移後の動作がうまくいかない問題を解決!

こんばんは!
最近Bootstrap最新版を導入し、新しい機能を追加して浮かれていたところ『あれ?うまくいかないな』と思う部分がありました。
具体的には、リロード後は問題ないのですが画面遷移などをした後にオフキャンバスやドロップダウンなどの機能が作動しないといったものでした。
メンターさんに質問し、なぜそうなっていたのか理解できたので共有してみようと思います。

## 環境
Rails 6系
Bootstrap 最新版(5.3?)
Cloud9

## 原因
ズバリ、Rails特有のターボリンク(Turbolinks)が画面遷移後にBootstrapのJavascriptを使っている部分を読み込めなくしているとのことでした。そういえば、普通にRailsでjsファイルに書き込むときはターボリンク無効化する記述しているのになんでBootstrapではその発想が思いつかなかったんだ!と自分の技量不足に反省しつつ、、、
そもそもターボリンクとは?という方は[こちら](https://zenn.dev/ganmo3/articles/d234583bdc876f)を参考にしてみてください。

元記事を表示

Rails 暗号化まとめ

アプリケーションがアクセスするのは暗号化されていないデータですが,データベースには暗号化されたデータが保存されます.
もし機密情報が漏れたとしても,暗号化しておくことで流出した情報を解読することは困難です.

オブジェクトがDBに暗号化されず保存されている時,万が一個人を特定できるデータが流出すると大変です.
そのために暗号化が標準ライブラリとして用意されています.
RailsでActiveRecordを使って暗号化するにあたり,よく使いそうなものをまとめました.

# 利用方法

## セットアップ
“`console
$ bin/rails db:encryption:init
“`
出力:
“`console
active_record_encryption:
primary_key: <生成されたキー>
deterministic_key: <生成されたキー>
key_derivation_salt: <生成されたキー>
“`
“`rb:application.rb
class Application < Rails::Application conf

元記事を表示

Ruby on Railsにおけるサービス提供可否判定ロジック解説

この記事では、Ruby on Railsを使用したアプリケーション開発において、特定の日に特定のサービスが提供可能かどうかを判断し、その結果をユーザーに視覚的に表示する方法について解説します。具体的なシナリオとして、ある会社が複数のサービスを提供しており、それぞれのサービスには複数のスタッフが割り当てられています。スタッフは日ごとに異なるスケジュールで働き、サービス提供の可否はスタッフのスケジュールと提供可能なサービスに基づいています。

## 基本概念

– **サービス(Service)**: 会社が提供するサービス。例えば、ヘアカット、マッサージなど。
– **スタッフ(Staff)**: サービスを提供する従業員。各スタッフは特定のサービスを提供する能力があり、日によって異なる時間帯に働きます。
– **スケジュール(Schedule)**: スタッフが特定の日に働く時間帯。`start_time`と`end_time`で定義されます。

## 目標

ある日における各サービスの提供可能性を時間帯ごとに判定し、それを以下の3つの状態で表示する。

– `○`:サービスを提供でき

元記事を表示

Railsでのデータ取得: アソシエーションメソッドと直接クエリの選択

## 問題定義
Railsアプリケーションにおいて、特定の日付に勤務するスタッフのスケジュールを取得する必要がありました。条件は以下の通りです。

– `at_work`カラムが`true`であること。
– `date`カラムが指定された日付(`@date`)であること。

この情報は、スタッフが提供可能なサービスの時間帯を表示するために使用されます。

## 解決策の提案
直接クエリを使用して、指定された条件に合致するスタッフのスケジュールを取得する方法を選択しました。このアプローチを選んだ理由は、特定のフィルタリング条件に基づくデータセットの抽出が必要であり、アソシエーションを通じた方法よりも直接クエリによる方が効率的であると判断したからです。

## サンプルコード

“`ruby
# @dateに勤務可能なスタッフ
@working_staffs_on_date = @company.staffs.joins(:schedules)
.where(schedules: {at_work: true, date: @d

元記事を表示

Railsでの`Unpermitted parameters`警告: 対処法と無視してもよい場合

Railsアプリケーション開発中にはしばしば`Unpermitted parameters`の警告に遭遇します。この警告は、ストロングパラメータによって許可されていないパラメータがリクエストに含まれていることを意味します。この記事では、この警告をどのように扱えばよいのか、そしていつ無視しても安全なのかについて説明します。

## `Unpermitted parameters`とは?

Railsでは、コントローラに送られてくるパラメータを管理するためにストロングパラメータが導入されています。これにより、不正なパラメータによるマスアサインメント脆弱性を防ぐことができます。`Unpermitted parameters`の警告は、ストロングパラメータによって明示的に許可されていないパラメータがリクエストに含まれている場合に出されます。

## 警告が出る原因

– フロントエンドから予期しないパラメータが送信されている。
– コントローラのストロングパラメータの設定が不足している、または誤っている。

## 警告を解消する方法

1. **パラメータを正しく許可する**: 必要なパラメー

元記事を表示

Railsでデフォルト値をモデルから取得する方法

Railsのアプリケーションにおいて、フォームからの入力がない場合にデフォルトの値を使用したいシチュエーションはよくあります。この記事では、`staff`の編集フォームで特定の入力がない場合に、`services`テーブルの`fee`カラムに設定されている値をデフォルト値として使用する具体的な方法について説明します。

## メソッドの定義場所

この機能を実装するにあたり、デフォルト値を提供するメソッド`default_fee`を`Service`モデル内に定義します。これにより、特定のサービスに関連付けられたデフォルト料金を簡単に取得できるようになります。

## `default_fee`メソッドの定義

`Service`モデルに`default_fee`メソッドを定義することで、特定のサービスのデフォルト料金を取得できます。以下はその定義例です。

“`ruby
class Service < ApplicationRecord # 既存のコード # デフォルト料金を返すメソッド def default_fee self.fee end end

元記事を表示

[Rails]erb2slimコマンドでNoMethodErrorが発生した場合の対処法

## 経緯
html2slimを使用してerbをslimに変換しようとしたところNoMethodErrorが発生した。
“`bash
$ bundle exec erb2slim app/views/layouts/ –delete

NoMethodError: undefined method exists? for File:Class
“`

## 何故発生したか?
Ruby3.2で削除されたFile.exists?メソッドをhtml2slimが使用していた。

## 対処法
このエラーが発生した当時は、ソースコードの `File.exists?` を `File.exist?` に書き換えて対応したのですが、別名でRuby3.2に対応したhtml2slimが存在することに気付きました。

https://rubygems.org/gems/html2slim-ruby3

という訳で、こちらをGemfileに追加して`bundle install`します。
以前のhtml2slimはGemfileから削除して下さい。

“`ruby:Gemfile
gem ‘html

元記事を表示

Rails ActionDispatch::Cookies::CookieOverflowというエラーが出る原因と対策

※この記事は僕がぶち当たった問題をとりあえずChatGPTくんに丸投げしてライティングしてもらったものです。

# 概要
この記事では、Railsアプリケーション内で発生する可能性のあるActionDispatch::Cookies::CookieOverflowエラーについて説明します。
このエラーは、クッキーがサイズの上限を超えた場合に発生します。エラーの原因や、解決するためのさまざまな方法について解説します。

# エラーの原因
エラーの原因は、クッキーのサイズが大きすぎることです。
特に、セッション情報をクッキーに保存している場合、その情報が大量になるとエラーが発生しやすくなります。

# 対策
エラーを解決するためには、以下のような方法を検討することができます。

1. クッキーのサイズを小さくする: 必要な情報のみを保存することで、クッキーサイズを削減します。
2. セッション情報のサーバーサイドへの保存: セッション情報をサーバーサイドのメモリやデータベースに保存することで、クッキーのサイズを減らすことができます。
3. クッキーの分割: クッキーが大きすぎる場合は、複数

元記事を表示

【Rails】Bootstrap4から最新版(ver.5.3)に移行する方法

こんばんは!
今日Bootstrap4から最新版へと移行したので、方法を載せておきます。
実際方法は公式に載っていますし、とても簡単なのですぐ導入できます!
ですが、今回は自分の備忘録として載せます笑

## 過去のバージョンからの移行
今回古いバージョンからの移行となりましたが、特に古いバージョンの記述があっても残しておいて問題ありませんでした。
移行するメリットは最新版でjavascript主体のBootstrapが適用できるということです(Ver.4ではjQueryも使われていましたが、Ver.5以降はjavascriptのみになったそうです。)。オフキャンバスやその他多くの新機能も実装できるようになります。ただ一つデメリットとして挙げられるのは、もともとBootstrap4に対応していた記述が一部使えなくなる場合があることです。おそらくjQueryを使っていた部分やclass変更があった部分かと思います。私の場合は特に移行後も動作に問題ありませんでしたが、部分的にはそのような問題が起きうるかもしれないです。

## 早速導入してみる
1. 以下の記述をlayouts/appli

元記事を表示

OTHERカテゴリの最新記事