Rails関連のことを調べてみた2021年12月30日

Rails関連のことを調べてみた2021年12月30日
目次

Validation failed: # must exist 解決法 

##はじめに
Railsでポートフォリオを開発中に、rails consoleで投稿機能がしっかりデータベースに入っているかを確認した。
しかし、model.saveで実行した結果・・・
=>false
という結果が出た。

データベースに保存できていない。

##試したこと

model.save!
上記の様に!をつけてエラーがどこにあるのかを確認できる。

そうすると・・・
ActiveRecord::RecordInvalid (Validation failed: モデル must exist)

というエラーが出てきた。

“`java:モデル.rb
class モデル < ApplicationRecord belongs_to :user, optional: true end ``` optional: true をつけるだけで問題が解決した。

元記事を表示

【 rails db:migrate実行時のエラー 】

##カラムを新しく追加し、rails db:migrateを実行したが、エラー発生
deviseを導入し、ユーザー管理機能を実装していました。
`login_id`カラムを追加しようと思い、マイグレーションファイルにカラムを追記し、
`rails db:migrate`を実行したところ、
`Mysql2::Error: Table ‘users’ already exists`と表示される。
(usersテーブルは既に存在していますよ〜)

##なぜ?
原因はよく分からないまま、エラーをもとに検索。
##結果
`rails db:dorp`で一度データベースを削除し、
`rails db:create`で再生成。

その後`rails db:migrate`を実行すると、エラーも無く、
`login_id`カラムも追加されていました。

##反省
configディレクトリ内のdatabase.ymlファイルに記してある、
`utf-8mb4`を`utf-8`に変更していなかった事が原因と考えられます。
この二つではデータの保存形式が異なるそうです。

元記事を表示

oc debug コマンドで ROSA Node に遠隔ログインしてみた

# はじめに

今回は短い Tips ブログです。AWS で ROSA(Red Hat OpenShift Service on AWS) を動かしているときに、SSH でアクセスしたい気持ちになります。SSH 自体は出来ないのですが、`oc debug` や `kubectl debug` コマンドで該当の Node へリモートアクセスすることが出来ます。今回は、その手順を紹介します。

oc コマンドは、kubectl コマンドと同じ機能を提供しており、さらに OpenShift リソースを扱えるようにしているコマンドです。次の URL に2つのコマンドの相違点が説明されています。
https://access.redhat.com/documentation/ja-jp/openshift_container_platform/3.11/html/cli_reference/cli-reference-differences-oc-kubectl

今回のリモートアクセスについては、どちらでもいいのですが、OpenShift になれるために oc コマンドでやっていきます。

元記事を表示

Rails 7.0で”DEPRECATION WARNING: image/jpg is not a valid content type”のようなエラーが出た場合

## 発生した問題
Rails 7.0にバージョンアップしてテストを実行したら以下のようなエラーメッセージが出ました。

“`
DEPRECATION WARNING: image/jpg is not a valid content type, it should not be used when creating a blob, and support for it will be removed in Rails 7.1. If you want to keep supporting this content type past Rails 7.1, add it to `config.active_storage.variable_content_types`. Dismiss this warning by setting `config.active_storage.silence_invalid_content_types_warning = true`. (called from public_send at /Users/jnito/.rbenv/versions/

元記事を表示

Rails7のlink_toでmethod: :deleteする

Rails7で

“`erb
<%= link_to t("sign_out"), sign_out_path, method: :delete %>
“`
しようとしたら動きませんでした。

代わりに

“`erb
<%= link_to t("sign_out"), sign_out_path, data: { turbo_method: :delete } %>
“`

を使えば良いようです。

元記事を表示

[Rails]オブジェクト指向とは 3行で要約

#オブジェクト指向を簡単に言うと
“`
同じようなプログラムを1か所にまとめてコードを再利用しやすくする仕組み
他のプログラムからできるだけ変更できない仕組み
継承したコードの一部を変更して利用するための仕組み
“`

下記URLに詳しく書かれています。
[オブジェクト指向とは](https://robo-done.com/blog/2021/04/doneship_object_oriented/)

元記事を表示

ブラウザを終了してもsessionを維持する方法

## ユースケース
Deviseでtimeoutableのモジュールを導入しつつ、ブラウザを終了してもセッションを維持したいユーザ
## 方法
### 1 セッションのタイムアウト時間を設定する
“`config/initializers/devise.rb
# コメントアウトを解除し、何分でタイムアウトになるのかを設定する
config.timeout_in = 30.minutes
“`
### 2 Deviseを設定しているモデルを修正
“`app/models/user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :trackable, :recoverable, :timeoutable # <= 追加 end ``` ### 3 session_keyを特定 ``` $ Rails.application.config.session_options[:key] => “_qiita_session”
“`

### 4

元記事を表示

【RailsAPI】AbstractController::DoubleRenderErrorの対処法

症状

RailsAPIモードで、条件でrenderするものを変えるアクションを作成時に、以下のエラーが発生しました。
翻訳すると、「このアクションでは、レンダリングおよび/またはリダイレクトが複数回呼び出されました。ご注意ください」

“`terminal:error
AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you
may only call render OR redirect, and at most once per action.
Also note that neither redirect nor render terminate execution
of the action, so if you want to exit an action after redirecting, you need to do something like “re

元記事を表示

「heroku run rails db:migrate」コマンドとは・・・

##環境
– Ruby 2.6.5
– Rails 6.1.4.1

##調査の背景・目的
Herokuのデプロイ時のエラー文「We’re sorry, but something went wrong.」が出た際の対処法で、「heroku run rails db:migrate」コマンドを入力すると解消された。コマンドの詳細について記載する。

##そもそもmigrationとは・・・
– データベースの構造(テーブル、カラム)を変更するときに利用する機能

##migrationファイルとは・・・
– データベースを生成する際の設計図

##「rails db:migrate」コマンドで何をする?
– migrationファイルの内容をデータベースに反映する

##「heroku run rails db:migrate」コマンドで何をする?
– migrationファイルの内容を**herokuサーバのデータベース**に反映する

以上

元記事を表示

【Rails】定数の定義方法【上書きトラブル注意】freeze

皆さんは、定数ってよく使いますか?

「Rails」も別の言語と同様で、
どこか専用の場所に定義して使うんだろうなー…ってフワッとした認識だったのですが、調べてみると色々注意点が出てきました。

Railsの定数っていうのは「定数=定まった変数」と言いながら、
実はプログラム内で値を書き換えることが可能なのですね。

チーム開発においては、その辺特にバグの原因にもなり得る箇所かなーなんて思うので、
ぜひ皆さんの今後の開発トラブル回避に繋がるなら幸いだなーと思います!

注意点の前に、
まず、Railsの定数の定義方法について3つ共有します!

# 定数を定義する方法①【カンタン】

一番カンタンな方法がこちら。
「config/initializers/constants.rb」ファイルに定数を定義する方法です。これが、アプリケーションのどこからでも定数を呼び出せる一番カンタンな方法でした。

“`config/initializers/constants.rb
module Hoge
FUGA = [“これは定数です”]
end

p Hoge::FUGA
# => “これ

元記事を表示

【未経験開発 Rails/React(TypeScript)/AWS/Docker/CircleCI】モダンな技術でポートフォリオを作成する方法

# 0. はじめに
モダンな自社開発企業でよく用いられている技術(Rails, React(TypeScript), AWS, Docker, CircleCI)を使用してポートフォリオを作成しました。
本記事のターゲットやコンテンツは以下のとおりです。

## ターゲット: 誰に対する記事か
– 未経験でエンジニア転職するために、プログラミング学習をしている方。
– 未経験でエンジニア転職するために、ポートフォリオを作成しようとしている方。

## コンテンツ: 何がわかるか
– 最終的にどの程度学習すればいいのかの全体感。
– Rails, React(TypeScript), AWS, Docker, CircleCIを使ったポートフォリオの作成方法の概要。

# 1. 概要
## 1.1 サービス概要
人と人との繋がりのあるべき姿を実現する、半匿名型SNSです。
Twitterと似ていますが、以下の2点で異なります。
1. フォロワーの投稿が匿名化されるため、誰によって投稿されたかわからない。
2. 週に1度、投稿を1つだけ匿名化解除できる。
これらの機能により、自由な発信と、

元記事を表示

【Rails】production環境でCSS等が反映されないとき(ActionController::RoutingError (No route matches [GET] ….

## 環境
Ruby 3.0.2
Rails 6.1

## 問題
CSSなどをプリコンパイルの対象に指定し,コンパイル実行後にproduction環境にてページを表示してみたらCSS等の設定が全く反映されていなかった.また,ログ(`log/production.log`)を確認してみると

“`
ActionController::RoutingError (No route matches [GET] “/assets/ … .css”):
“`

のようなメッセージが残っていた.

## 解決方法
まず,コンパイルするときに環境を指定していなかったのが問題だった.以下のように,環境を指定してコンパイルをする.

“`sh
$ RAILS_ENV=production bundle exec rails assets:precompile
“`

なお,`bundle exec rails`の部分は環境構築のしかたによって適宜変えて実行すべきところだろう.

次に,`config/environments/production.rb`を開き,`config.publi

元記事を表示

Ruby の自己代入演算子 ||= について

“`
test ||= 200
“`

この謎の記号  `||= ` についてまとめてみました

##結論

“`
test ||= 200
“`

`test = test || 200`の省略形
変数testが存在しない(nil または false)場合、変数testに200を代入する
と言う意味になります

##具体例

“`
#変数testに値を代入していない場合(変数の中身がnilまたはfalse)
test ||= 200
=> 200

#変数testに値を代入している場合(変数の中身がtrue)
test = 10
test ||= 200
=> 10
“`

変数の中身が

– nilまたは、false → 右辺の値(200)を変数に代入する
– true → 左辺の変数に代入されている値(10)を返す

irbを用いることで自分で調べることもできます
![qiiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/893750/7f706866-671e-6f2

元記事を表示

[Rails]データベースへのアクセス負荷を軽減するために気をつけるべきこと 「3行で要約」

#3点にまとめる
“`
テーブルを正規化する
シンプルなSQLを心がけ
インデックスの張り忘れ、もしくは不正
“`
##テーブルの正規化とは
“`
データの冗長性を排除し、一貫性や効率性を保持するようなデータ形式になる形でテーブルを定義すること。
“`
##SQLとは
[SQLとは](https://hnavi.co.jp/knowledge/blog/sql/)
##インデックスとは
“`
「テーブルとは別に検索ように最適化された状態のデータ」
“`
##終わりに
アップデートしていきます。

元記事を表示

rails7から追加された`compact_blank`について

# 概要

例えば、Arrayにnilが入りうる可能性がある場合にnilを取り除きたいケースがあった場合に最小の行動で表すと`reject(&:blank?)`を使っていたがその処理のショートハンドができました。

“`ruby
> [1, 2, 3, nil].reject(&:blank?)
=> [1, 2, 3]

> [1,2,3,nil].compact_blank
=> [1, 2, 3]
“`

# 追加されたPR
https://github.com/rails/rails/pull/36412

元記事を表示

【Rails】scaffoldについて【簡単なアプリケーションがすぐに作れる】

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _scaffoldについて_
 
 です。 

## 疑問点についての解説

###結論
ターミナルで`rails g scaffold モデル名 カラム名①:データの型① …`を実行することでアプリケーションの雛形を作成することができる。

###使い方の流れ

まず、ターミナルで以下のコマンドを実行し、sample_appを作成する。

““
rails new sample_app
“`

アプリケーションが作成できたら以下のコマンドでsample_appディレクトリへ移動する。

“`
cd sample_app
“`
移動ができたら以下の通り入力。

“`
rails g scaffold Comment t

元記事を表示

【Rails】一定期間でログファイルを削除【手動は卒業】

開発中ってログの容量食いますよね…。
みなさんは、どうしてますでしょうか?

適当なタイミングで削除はしてるのでしょうか?

実のところ私は、開発の際は、pryの方を使うことが多く、正直
ログに関してあまり理解していなかったんですよね…。

ただ、これを機に色々調査してみたので共有いたします!

# rails:ログを削除するコマンド
“`
$ rake log:clear
“`

コンソールで、上記コマンドを実行すればログファイルが消えるかと思います。

ただ、毎回毎回手動で削除するのってかなり面倒ですよね?
そこで、何かいい方法がないか調べてみました。

# ログローテーションとは?
>ログローテーションとは、システムが残す時系列の記録データ(ログ)が際限なく増えることを防ぐために、一定の容量や期間ごとに古いログを削除したり新しいログで上書きすること。また、そのような機能。
[IT用語辞典 e-Words](https://e-words.jp/w/%E3%83%AD%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%

元記事を表示

【Tips】Ruby on Rails 開発

### circleci
>https://hanachin.hateblo.jp/entry/2019/07/10/010613
bundle exec rspec –failure-exit-code=0
bundle exec rspec –only-failures

テストの通過率を上げる

### その他
>https://lgtmoon.herokuapp.com/

LGTMジェネレーター

元記事を表示

Railsのインスタンスメソッドとクラスメソッドの違い

## 概要
Ruby on Railsにおいて__インスタンスメソッド__と__クラスメソッド__についての知識が曖昧だったため
備忘録としてアウトプットします。

## インスタンスメソッドとは
####結論
インスタンスメソッドとは、あるクラスから生成されたインスタンスに対して呼び出すことのできるメソッドです。
#### 使用用途例
例えば、Userクラスにおいて生成されたuserが成年か未成年かを判定したい場合など。
#### コード例

“`ruby
class User
def adult # インスタンスメソッド
self.age >= 20 ? ‘成人’ : ‘未成年’ # 20歳以上なら’adult’, 20歳未満なら’child’を返す処理
end
end

user = User.new(name: ‘田中’, age: 23)
user.adult #=> ‘成人’
“`

## クラスメソッドとは
#### 結論
クラスメソッドとは、クラス全体に対して何か処理を行う場合に使用するメソッドです。
#### 使用用途例
例えば、Userクラ

元記事を表示

【Ruby】自己代入演算子「||=」

“`ruby
hoge ||= 5
“`

「||」演算子の自己代入演算子。**hogeが偽か未定義ならhogeに5を代入する。**
わかりやすく書き直すと↓

“`ruby
hoge = hoge || 5
“`

hogeが**false,nil以外** → 5を返す
hogeが**false** → hogeに5を代入する
hogeが**nil(未定義)** → hogeに5を代入する

##参考

https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#selfassign

元記事を表示

OTHERカテゴリの最新記事