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

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

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

元記事を表示

【Rails】異なるアクションが読み込まれるエラー(+その他エラー)

今日は新しい機能を実装している際にルーティングを追加し、エラーが出てしまったのでそのエラー解決方法について備忘録として載せたいと思います!
他にもいくつかエラーが出てしまったので、その対処法も書いてみます!
以下紹介するエラー内容です。

::: note alert
エラー1: パスを指定したが遷移時に異なるアクションが読み込まれるエラー
エラー2: ActionTextが正常に表示されない(エラー文は出ていない)
エラー3: app/javascript/packs/application.jsが読み込まれない(コンソール上のエラー)
:::

## エラー1: パスを指定したが遷移時に異なるアクションが読み込まれるエラー
今回はパス自体の記述はあっているのに、遷移した際に違うアクションのページが読み込まれている場合です。ズバリ!ルーティングに問題がありました…というのも、そもそもなぜそのようになってしまっているのかまず説明しますね。
ルーティングをする際にroutes.rbを書きますよね。Railsはパスを読み込むと記述したルーティング順にどのアクションをすればいいか探してい

元記事を表示

[Docker] Rails7 + postgreSQL + bootstrapの環境構築

## はじめに

この記事では Docker を使って rails7 + PostgreSQL + bootstrap の環境構築を行います。

## 環境

– macOS Ventura 13.3.1
– Docker 24.0.7
– Docker Compose v2.23.3-desktop.2
– Ruby 3.2.2
– Rails 7.0.8.1
– PostgreSQL 12.18
– bootstrap5 5.3.2

## ファイルの準備

ファイル構成です。

“`
app
|– Dockerfile
|– docker-compose.yml
|– Gemfile
|– Gemfile.lock
“`

### Dockerfile

“`Dockerfile:Dockerfile
FROM ruby:3.2.2-alpine
RUN apk update && \
apk add –no-cache gcompat && \
apk add –no-cache linux-headers libxml2-d

元記事を表示

【Ruby on Rails】form_withヘルパーの各記述を読み解く

### 勉強前
– form_withヘルパーを使うと自動でフォームを生成 + 登録処理をいい感じにしてくれる?みたい…
 でもどこの記述がどこの画面表示、何の処理に紐づいているのかわからない
– 登録処理はcontrollerのcreateメソッドとセット?

### 調べたこと
– form_withヘルパーでできること
– フォームの生成
– フォームに入力された各要素をconrrollerのcreateメソッド or updateメソッドに渡す
– 登録済みのデータをフォームにデフォルト値として表示する

– labelとxxx_fieldの値は、リクエスト先のメソッドの引数のハッシュ(モデルのパラメータ名)と一致している必要がある

以下サンプルコード
前提として…
– 以下を登録するユーザー登録フォームを想定
– ユーザー名(name)
– メールアドレス(email)
– パスワード(password)
– 確認用パスワード(password_confirmation)

#### controllerのメソッド定義
fo

元記事を表示

【個人開発】漫画好きが漫画とアロマをお勧めする診断アプリを作りました📚

## はじめに
はじめまして、1歳子持ちのshikimum(@abbyE424214)と申します。
完全異業種からエンジニアに転職するためオンラインスクールに入り学習をしていました。
私は漫画が大好きで、漫画に勇気をもらったり慰めてもらったり、セリフを真似したりと、影響受けまくりの人生を送ってきました💪

もっとたくさんの人に漫画を読んでもらいたい、人生を変える1冊に出会って欲しいという思いから、その人にあった漫画をおすすめするアプリを作成しました📚

**「漫画の処方箋」**
ユーザーの疲れタイプに合わせて、あなたにあった漫画とアロマをお勧めします。

https://www.comic-health.com/

[![Image from Gyazo](https://i.gyazo.com/03568b9efa89d71279e9c0877b08a8ca.jpg)](https://gyazo.com/03568b9efa89d71279e9c0877b08a8ca)

https://github.com/shikimum/portfolio

## 使い方
### **1.診

元記事を表示

Railsプロジェクトを新規作成し、Docker化する

## はじめに

最近、Dockerについて学習したので、実際にRailsの新規プロジェクトを作成し、Docker化する手順を書いていきます。

なお、データベースにはPostgreSQLを、オーケストレーションツールには、docker-composeを利用します。Docker Containerは1コンテナ1アプリケーションの構成とします。

補足となりますが、私は以下の学習教材を利用してDockerの理解を深めました。もしDockerについて理解を深めたい方はご参考にしていただけるとよいかもしれません。

– [米国AI開発者がゼロから教えるDocker講座 | Udemy](https://www.udemy.com/course/aidocker/)

## 作業手順
1. 必要なファイルの作成
– Dockerfile
– docker-compose.yml
– Gemfile
– Gemfile.lock
2. Docker Containerの起動とRailsプロジェクトの新規作成
4. database.ymlの編集
5. データベース

元記事を表示

Apache + Passenger + Docker + Docker-composeでRuby on Railsの環境を構築

# 概要
`Docker`と`Docker Compose`を使用して、`Apache`サーバー上に`Phusion Passenger`を動作させ、`Ruby on Rails`を展開する環境を構築します。今のこのご時世にこの構成で`Rails`を動かす事はほぼないと思っておりますので、構築手順は、シンプルに記載します。

# Apacheの概要
`Apache`は、`HTTP`サーバーの一つであり、クライアントからの`HTTP`リクエストを受け取り、ウェブページやウェブコンテンツを提供する役割を果たす

https://httpd.apache.org/

# Phusion Passengerの概要
`Apache`や`Nginx`等の`web`サーバーと連携して使用する。`Passenger`は`Web Application`を処理する為の`Application`サーバーとして機能し、`web`サーバー(`Apache`や`Nginx`)と連携する事で、リクエストの受け入れ、アプリケーションの処理、レスポンスの送信を行う

https://www.phusionpassen

元記事を表示

scopeメソッドとは

## scopeとは

scopeとは、データベースからレコードを取り出すロジックをカプセル化するメソッド。

基本構文は、第一引数に条件式を呼び出すためのスコープ名、第二引数に条件式を記述します。

“`ruby
class モデル名 < ApplicationRecord scope :スコープ名, -> { 条件式 }
end
“`

また、条件式に引数を渡すこともできる。

“`ruby
class モデル名 < ApplicationRecord scope :スコープ名, -> (引数){ 条件式 }
end
“`

## メリット

scopeメソッドを使用するメリットは、以下の3つ。

①モデルとコントローラに正しく役割を分担できる

②可読性が上がる

③DRY(Don’t repeat yourself)に則ったコードを書ける

例)booksテーブルからタイトルが2000円以下で、ジャンルが食のレコードを取り出す場合。

| id | title | genre | price | out_of_stock |
| — | — | —

元記事を表示

【Rails】params[:id]を取得するbefore_actionにindexを指定するとCouldn’t find Template without an ID

# 初めに
削除機能の実装でエラーに遭遇したので書きます。

# 問題
削除ボタンを押したときに、`Couldn’t find Template without an ID` が起きました。

# 解決方法
before_actionにindexアクションを指定していたので削除しました。

“`ruby
# before_action :set_template, only: [:index, :edit, :update, :destroy]
before_action :set_template, only: [:edit, :update, :destroy]

def set_template
company = Company.find(params[:company_id])
@template = company.templates.find(params[:id])
end
“`

set_template で何をしているか?

インスタンス変数 @template に /company_id/templates/id を代入して、templa

元記事を表示

ポートフォリオ作成

# 天気予報日付ごとに表示したい
– OpenWEatherMapAPIを使用して、天気の情報を取得しているのですが取得した予報データが1つの大きな配列に格納されたままとなっており、ビューで日付ごとにデータを扱うの難しいという問題が発生しておりました。
– `group_by`メソッドを使用して、同じ日付の予報データをグループ化してまとめ、配列として取り出すことで、各日の天気情報を区別して表示できるようにしました。
– これにより、ユーザーが一目で知りたい日にちの情報を確認できるようになっております。
– 加えて、取得できる天気のアイコンには2種類あり、取得した時間帯により異なるアイコンが表示されてしまっていたため、gsub(ジーサブ)メソッドを使用して、天気予報のアイコンを常に昼間のアイコンが表示されるようにしました。

“`ruby
def show
@weather_data = get_weather_forecast(@post.latitude, @post.longitude)
end

def get_weather_forecast(latitu

元記事を表示

【個人開発 / PictoMemory】旅の思い出の投稿・地図の色塗り・旅先探しができるアプリを作りました

# はじめに
エンジニア目指して学習中のさば🐟(@saba7678pg)と申します。
2023年6月からエンジニア転職するためにプログラミングスクールで学習を行っております。

これまでの学習の成果として「PictoMemory」という旅の思い出投稿アプリを作成致しました。
アプリの紹介、使用技術を紹介させていただきます。

:::note info
万が一誤り・ご意見・ご指摘事項等ございましたら、
コメントやX宛にDM頂けますと幸いです。
:::

## アプリ概要

サービスURL:https://pictomemory.com
サービスリポジトリ:https://github.com/SabaCrevette/travel_app

[![Image from Gyazo](https://i.gyazo.com/6c85e19c8160cc723eb02581d8bae6bc.png)](https://gyazo.com/6c85e19c8160cc723eb02581d8bae6bc)

旅の思い出を投稿する、CGM型のサービスです。
投稿した都道府県に紐づいて、真っ白な日

元記事を表示

RubyとRailsのバージョンアップで苦労したこと(Gem編)

依頼いただいて久しぶりに言語とFWのバージョンアップの対応を行ったので、苦労した点などを。

PHP(4->5)などのバージョンアップぐらいしか経験がなかったので不安でしたが、なんとかなりました。

### バージョン情報

#### 元のバージョン

– Ruby
– 2.7.4
– Rails
– 6.1.4

#### アップしたバージョン

– Ruby
– 3.2.2
– Rails
– 7.1.3

### やる前に想定していたこと

– 最近参画したプロダクトで知らない箇所しかないので苦労するだろうなぁ
– メジャーバージョンを上げるから、コードの書き方が変わる箇所も多々あるだろうなぁ
– メソッドとかのDeprecateのWarningとかもすごいだろうなぁ
– 設定とかも大きく変わるだろうから、精査しないといけないな
– Gemとかそのままだと動かないものがあるからバージョンアップ必要だろうなぁ
– Gemもそもそも更新止まっていて、更新できないものもあるんじゃないかなぁ
– リリース後にトラブルがあった時に戻す

元記事を表示

プログラミング教材で作ったチャットアプリに機能追加してみた

# はじめに
[こちら](https://www.techpit.jp/courses/195)の講座でチャットアプリを作成したので、追加のお勉強としてメッセージの削除機能を追加してみました。自分の備忘録を兼ねてやったことをメモ的に書いておきます。

# 環境
“`
OS:MacOS 14.1.1(Sonoma)
Ruby:2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin23]
Vue.js:@vue/cli 5.0.8
“`

# 仕様
* メッセージごとに削除ボタンを表示し、クリックすると該当メッセージが削除される
* 削除対象はチャットにログインしている本人が送信したメッセージのみ
* 他人のメッセージには削除ボタンを表示させない
* メッセージ削除に成功するとメッセージ一覧が再取得され、削除したメッセージは画面から消える

# ルートを設定する
* メッセージ削除のルートを追加します
“`config/routes.rb
resources :messages, only: [‘index’, ‘d

元記事を表示

【Rails初心者】いつものform脱却!Action Textとdatetime_fieldの紹介

こんばんは!
今回の紹介は以下の通りです。
1. Action Text
2. 時間のform(datetime_field)

# 環境
AWS Cloud9
Rails 6系

## Action Text
![スクリーンショット 2024-03-01 231109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677302/c75a7f19-b638-8334-433d-b63891352dcd.png)
普段のformと違い、太字や斜体、箇条書きなどを感覚的に入力できるものです。こちらは導入しないとこのように表示できないため、下にあるURLを参考に導入してください。導入自体は簡単です!

::: note warn
実装時の注意点
Actiontext用のカラムはテーブル作成時に作成しないでください!
モデルに直接書き込みます。
:::

https://autovice.jp/articles/36

## 時間のヘルパーメソッド
カラムのデータ型datetimeにしている場合有効ですが、時

元記事を表示

OTHERカテゴリの最新記事