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

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

railsの権限エラーの対応(Windows)

以下の手順で構築した環境で開発を進めようとした際に権限エラーにより Controller などが作成できなかったため対応しました。

## 環境構築

Winows11にDocker、ruby、rails、postgresql をインストールし `rails new` で環境を作成する。

“`powershell
> rails new myapp -G -d postgresql
“`

## 初期のDockerfile

作成された環境には Dockerfile が含まれていて実行することができます。

“`Dockerfile
# syntax = docker/dockerfile:1

# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.2.3
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim as base

# Rails app lives here
WOR

元記事を表示

RailsアプリにVue.jsをモノリシックに導入するための準備

Vue.jsをRailsアプリケーションに統合するプロセスは、効率的なフロントエンド開発とリッチなユーザーインターフェースを実現するための重要なステップです。このガイドでは、Railsプロジェクトの作成からVue.jsの導入までの一連のステップを丁寧に解説します。特に、`jsbundling-rails`のセットアップ、Viteの導入、Node.jsバージョンの管理、そして`app/javascript`ディレクトリの活用に焦点を当てて説明していきます。

## 1. Railsプロジェクトの作成

まずは新しいRailsプロジェクトを作成します。ターミナルで以下のコマンドを実行してください。

“`bash
rails new myapp –database=postgresql
cd myapp
“`

ここではPostgreSQLをデータベースに選択していますが、プロジェクトの要件に応じて変更してください。

## 2. jsbundling-railsのセットアップ

`jsbundling-rails`は、JavaScriptのビルドシステムをRailsに統合するための

元記事を表示

Rails 7でViteとVue.jsを使った際のトラブルシューティング

Rails 7は、WebpackerからViteへと大きく移行しました。この変更は、フロントエンドの開発体験を大幅に向上させますが、同時に新しいチャレンジももたらします。この記事では、ViteとVue.jsをRails 7プロジェクトで使う際に直面する可能性のあるいくつかの一般的な問題とその解決策について紹介します。

## ViteRubyのMissingEntrypointError

エラーメッセージ:

“`bash
ViteRuby::MissingEntrypointError in Tops#index
Showing /path/to/app/views/layouts/application.html.erb where line #13 raised:

Vite Ruby can’t find entrypoints/application.js in the manifests.

Possible causes:
– The last build failed. Try running `bin/vite build –clear –mode=dev

元記事を表示

gemでrailsがインストールできなかった話。

レアケースです。

# エラー
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.

# 原因
俺は馬鹿だからよくわかんねぇけど、rbenv配下のrubyを使わず、システムにあるrubyを使っていることが原因らいい。。

# 根本原因
/.bash_profile内のhomebrewのパスの指定ミス。
brewのパス→rbenvのパス出通すべきところがrbenvのパス→brewのパスの順になっていた。

# 解決方法
rbenvはbrewの配下にいるべき人間なので、brewのパスをrbenvのパスの上に持ってくる。
(コマンドの擬人化)

## 感想
・調べてたら、M1macはみんなzshのシェル使ってる。(不安)
 小学校の家庭科の授業で自分だけおばあちゃんから借りたエプロンを使っているかのような不安。

元記事を表示

Rails6にyarnでBootstrap5.0を導入したらHerokuへのデプロイの際にエラーが起きた

Railsでyarnを使ってBootstrapを導入後、Herokuへのデプロイ時エラーに遭遇したので共有と備忘録として記事にしました。

## 開発環境

Ruby 3.0.1

Rails 6.1.7.6

導入したBootstrap5.0.2

## yarnを使ってBootstrapを導入した手順

以下の記事の手順を参考にさせていただき導入しました。
> [【2022年最新】Rails6にBootstrap5を導入する方法 – Qiita](https://qiita.com/jibiking/items/d2ebb21db620f9cce887)

### Bootstrap5.0.2をインストール

“`bash
$ yarn add bootstrap@5.0.2
“`

popper.jsをインストール

“`bash
$ yarn add @popperjs/core
“`

### application.html.erbに追記

“`ruby:app/views/layouts/application.html.erb

元記事を表示

【Rails】ActiveRecordのエラー解決法。no such column

railsの勉強でエラーにぶつかりまくって、パンクしそうなのでメモに残そうと思い、この記事を書きました。

同じようなエラーで困っている方の参考になれば嬉しいです。

初学者なので間違っていればご指摘お願いします。
## ActiveRecord::StatementInvalid in Tasks#index
現場Railsのチャプター4が最後まで進んだので、実装できているか改めて確認しようとログインをしたらエラーが発生しました。

![スクリーンショット 2023-05-09 14.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676271/4e06bc36-b650-20cd-8528-54379a20c5ce.png)

“`
ActionView::Template::Error (SQLite3::SQLException: no such column: tasks.user_id: SELECT “tasks”.* FROM “tasks” WHERE “tasks”.”

元記事を表示

Railsで生じたDeviseの設定エラー(undefined method ‘devise’ for User:Class`)を解決する方法

Railsアプリケーションでユーザー認証機能を追加する際、Deviseはその強力なサポートとカスタマイズの容易さから、非常に人気のある選択肢です。しかし、Deviseの設定や初期化の過程で問題が発生することがあります。この記事では、`NoMethodError: undefined method ‘devise’ for User:Class`という特定のエラーの解決方法に焦点を当て、その発生原因と対処法を解説します。

## エラーの発生原因

このエラーは主に、Deviseのジェネレータが正しく実行されなかった場合などに発生します。エラーメッセージは、`User`クラスでDeviseのメソッドが認識されていないことを示しています。

## エラーが発生したときの手順・経緯

1. `rails generate devise:install`を実行(当初見落としていましたが`Could not find generator ‘devise:install’.`というエラーが発生)。
2. `Gemfile`に`gem “devise”`を追加。`bundle install`を実行

元記事を表示

bundle installエラー解決法:An error occurred while installing mimemagic

環境構築中に、`bundle install`をした後に`mimemagic`というものに関するエラーが発生しました。初めてみるエラーだったので、メモに残そうと思います。

まだ、初学者なので間違っていたら教えていただければ幸いです。

:::note info
設定したいバージョン(mac環境)

Ruby 2.6.4
Rails 5.2.3以降
:::

## エラーが発生するまでの流れ
1. Ruby 2.6.4をインストール
1. Rails 5.2.8をインストール
1. rails -vを実行後に以下のエラー文が発生
“`
Could not find rails-5.2.3
Run `bundle install` to install missing gems.
“`
文章に従い、`bundle install`を実行しましたが、またもやエラー文が発生。今回はこのエラーを解決していきます。
## 解決したいエラー
`bundle install`実行後に発生したエラー文はこちらです。
“`
Gem::Ext::BuildError: ERROR: Failed t

元記事を表示

ActionController::UnknownFormat エラーの解決法

今回は、個人的に解決するのに時間がかかったエラーだったのでメモに残そうと思います。

もし、同じエラーで悩まれている方がいれば参考になれば嬉しいです!

:::note warn
まだ、初学者なので間違っているところがあればご指摘ください。
:::

## エラーが発生した流れ
やりたいこと:ログイン機能を実装したい。

user_sessionsコントローラーを作り、それに対応する`new.html.erb`のviewも作成。

ログイン画面をブラウザ表示しようとしたところ以下のエラーが発生。
## ActionController::UnknownFormat
今回、発生したエラー文です。
“`
ActionController::UnknownFormat (UserSessionsController#new is missing a template for this request format and variant.

request.formats: [“text/html”]
request.variant: []

NOTE! For XHR/Ajax or A

元記事を表示

simple_formatについて:改行の反映とXSSまとめ

railsの勉強でエラーにぶつかりまくって、パンクしそうなのでメモに残そうと思い、この記事を書きました。

初学者なので間違っていればご指摘お願いします。

##前提
参考書として使っている現場railsの学習で、タスク管理アプリを作っていた時に気になったことです。

タスク詳細画面のviewを作っていた時に、最初はこのように記述していました。
(ファイルの形式はslimです)
“`
td = @task.description
“`
![スクリーンショット 2023-05-18 21.06.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676271/97b7b0ff-6d16-e36c-184e-705201a09423.png)

ブラウザ表示して、詳しい説明フォームには以下のように改行して入力しました。

hello
good morning

ですが、なぜか改行が反映されず…。HTML変換後はこのようなコードになっていました。
![スクリーンショット 2023-05-18 21.07

元記事を表示

nginx→rails(puma)の構成で長め(〜1分)の処理が失敗する

## 事象
とある方向けの社内Webアプリ。
OpenMediaVaultのNginxでRailsを動かす、というごくごく一般的な構成。

あるときから長めの処理を行うページが動かなくなった。
具体的な事象は
* ブラウザで操作すると「サーバーとの接続が予期せず解除されました」みたいな感じになる
* curlで叩いても「Empty reply from server」
* 処理時間によっては問題なく成功する

(結構大きいファイルを変換する処理だったので、最初はアップロードまわりかと思ったがそうでもなく単純に長い処理をnginxが待ってくれない、という状態だった。)

nginx/error.logを参照した
* `*14 client closed connection while waiting for request, client: -.-.-.-, server: 0.0.0.0:3003` (ipはマスク済み)のエラーがある
* ↑のあとに`*4 open socket #25 left in connection 13`, `aborting`と出ている
* ネットで探

元記事を表示

Ruby on Rails: 未来の予約に対するユニーク制約の実装方法

## 背景

Webアプリケーションにおいて、ユーザーが特定の条件下でのみデータを作成できるように制限する必要がある場合がよくあります。特に、予約システムにおいては、一人のユーザーが一つの企業に対して、未来に一つの予約しか持てないようにすることが望ましいケースがあります。

この記事では、Ruby on Railsを使用して、このようなビジネスルールを実装する方法を解説します。

## モデルのバリデーション設定

カスタムバリデーションを`Reservation`モデルに追加することで、上記のルールを適用します。

“`ruby
class Reservation < ApplicationRecord belongs_to :customer belongs_to :company validate :unique_future_reservation_per_customer_and_company private def unique_future_reservation_per_customer_and_company return if

元記事を表示

Ruby on Rails: 未来の予約に一意性のバリデーションを適用する

## 概要

Ruby on Railsで予約システムを構築する際、特定のビジネスロジックを実装する必要がある場合があります。例えば、一人の顧客が一つの企業に対して、ある任意の1日につき作成できる予約は1つだけにする、といったケースです。さらに、この制限を未来の日付にのみ適用し、過去の日付には適用しないようにする必要があります。この記事では、そのような機能を実装する方法について説明します。

## バリデーションの設定

`Reservation`モデルに、顧客ID、企業ID、および日付の組み合わせが一意であることを保証するバリデーションを追加します。このバリデーションは、日付が今日以降である場合にのみ適用されます。

“`ruby
class Reservation < ApplicationRecord validates :customer_id, uniqueness: { scope: [:company_id, :date], message: "can only make one reservation per company per day",

元記事を表示

Ruby on Rails: `new_record?`メソッドの活用(レシーバなし含む)

## はじめに
Active Recordのオブジェクトが新規作成されたものか、既存のデータベースのレコードから読み込まれたものかを判別する必要があったため調べてみました。
このような場合、`new_record?`メソッドが非常に役立ちます。本記事では、`new_record?`メソッドの基本的な使い方と、特定のコンテキストでのレシーバーなしでの使用について解説します。

## `new_record?`メソッドとは

`new_record?`はActive Recordのインスタンスメソッドであり、オブジェクトがデータベースにまだ保存されていない新規レコードである場合に`true`を返します。つまり、`new`メソッドや関連するビルダーメソッドによってオブジェクトが作成され、まだ`save`が呼び出されていない状態を示します。

## 主な使い方

“`ruby
user = User.new(name: “Taro”)
user.new_record? # => true

user.save
user.new_record? # => false
“`

この例では、

元記事を表示

SQLクエリの安全性とプレースホルダーの重要性

## はじめに

開発において、データベースクエリの安全性は非常に重要です。この記事では、プレースホルダーの使用意義と、固定値を扱う際にそれをどのように適用すべきかについて説明します。具体的な例として、Railsアプリケーションにおけるカスタムバリデーションのコードを見ていきましょう。

## カスタムバリデーションの例

以下は、一人の顧客が未来の日付に一つの企業に対して一つの予約のみを持てるよう制限するカスタムバリデーションです。

“`ruby
class Reservation < ApplicationRecord validate :unique_future_reservation_per_customer_and_company private def unique_future_reservation_per_customer_and_company return if date.blank? || customer_id.blank? || company_id.blank? future_reservations = Reser

元記事を表示

Rails6.1でRubyを3.2にしたらスコープでキーワード引数が使えなくなった

# 背景
ruby on railsで開発しているのですが、rubyのバージョンを上げようと思ったら躓いてしまいました。日本語だとあまり情報がなかったので記事にしてみました。

railsとrubyのバージョンは下記の通り。
rails: 6.1.7.7
ruby: 3.0.6 -> 3.2.3

そもそもスコープってなに?というかたは、こちらの[リンク](https://pikawaka.com/rails/scope)とかが参考になるかもしれません。
私が開発しているアプリでは、モデルの中でよく使う条件式をわかりやすい名前のスコープとして定義したりしてます。

# 何が起きたのか?
例えば下記のようなスコープがあったとします。
(実際はキーワード引数を使う必要はないと思いますが、あくまで例なので悪しからず)
“`
User < ApplicationRecord scope :younger_than, lambda { |age:| where(age: ...age) } end ``` 使うときは、こん

元記事を表示

Rails で jQuery.ajax してたら勝手に X-CSRF-token がつくんだけど

[jQuery](https://jquery.com/) 使ってますか?多くの方はもう使ってないと思いますが、歴史あるWebアプリを触ってる方は使ってると思います。で、Rails([jquery-rails](https://github.com/rails/jquery-rails/))との組み合わせで気付いていなかった挙動があったのでメモしておきます。

“`js
jQuery.ajax({
url: ‘/api/v1/some_resources’,
type: ‘POST’,
data: {
attr1: ‘val1’
}
})
“`

こんなJSを書いて発行されたリクエストを見てみると、ヘッダに `X-CSRF-token` がくっついていました。 Rails の CSRF 防御機能で使うトークンです。つけた覚えがないのになんでついてるんだ!? axios とか素の [`fetch`](https://developer.mozilla.org/ja/docs/Web/API/Fetch_API) でリクエストするとつかないぞ!?とおもってコード

元記事を表示

Rails.logger.log は Rails.logger.add と違って7.0以下だとbroadcastされない

[標準の `Logger#add` は `Logger#log` の alias](https://docs.ruby-lang.org/ja/latest/class/Logger.html#I_ADD)だけど、 Rails 7.1系未満の `ActiveSupport::Logger` だと`add`と`log`は挙動が違っていて、 `ActiveSupport::Logger#add` は broadcast されるが、 `ActiveSupport::Logger#log` だと broadcast されない。

“`ruby
# 設定次第だけど
# 標準出力とログファイルに出る
Rails.logger.add(1, ‘hello’)
# ログファイルだけに出る
Rails.logger.log(1, ‘hello’)
“`

[v6.1.7.7 activesupport/lib/active_support/logger.rb](https://github.com/rails/rails/blob/v6.1.7.7/activesupport/lib/acti

元記事を表示

Controllerで定義したメソッドをViewでも使えるようにするhelper_method

controllerにはhelper_methodを定義すると、viewでも使えるようになる
“`ruby
class ApplicationController < ActionController::Base helper_method :current_user, :logged_in? private def current_user @current_user ||= User.find_by(id: session[:user]) end def logged_in? current_user != nil end end ``` ```erb <% if logged_in? %>
Welcome, <%= current_user.name %>
<% end -%>
“`
[公式ドキュメント](https://api.rubyonrails.org/classes/AbstractController/Helpers/ClassMethods.html#method-i-helper_me

元記事を表示

ViewComponentについての備忘録

### ViewComponentってなんやねん
– Rails 6.1 から標準で提供されるようになった
– Reactから影響を受けた、Presenter(ViewのためのUIのビジネスロジックを書く)パターンの進化版
– viewの再利用性を向上させるためのコンポーネントベースのアプローチ

### パーシャルと何が違うの?
– ViewComponent はパーシャルよりも独立したユニットとして扱われるため、コンポーネントごとにテストを書くことが簡単にできる

– パーシャルより読み込みが早い = パフォーマンスが向上する
従来のRailsテンプレートは実行時に読み込まれていたが、ViewComponentのテンプレートは、アプリケーション起動時にプリコンパイルされるため
– コードの品質が高まる
ViewComponentは単なるRubyのオブジェクトのため、コードの品質基準を守ることが比較的に容易

### 使い方
gemをインストール
“`
gem “view_component”
“`
基本的に`rb`ファイルと`erb`ファイルがセットで生成される

元記事を表示

OTHERカテゴリの最新記事