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

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

bcryptGemを用いたパスワードのハッシュ管理

# bcryptGemを用いたパスワードのハッシュ管理

Webアプリケーションのセキュリティを確保する上で、パスワードの安全な管理は重要な役割を果たします。`bcrypt` Gemを使用することで、Railsアプリケーションにおいて、パスワードを安全にハッシュ化し、管理することが可能です。この記事では、`bcrypt` Gemを使用したパスワードのハッシュ化と認証プロセスについて詳しく解説します。

## bcryptGemとは

`bcrypt` Gemは、パスワードのセキュリティを向上させるために使用されるRubyのライブラリです。このGemは、パスワードをハッシュ化することで、データベースに平文のパスワードを保存するリスクを回避します。

### パスワードのハッシュ化

– ユーザーがパスワードを設定すると、`bcrypt` Gemはそのパスワードをハッシュ化します。これにより、実際のパスワードとは異なる、独特な文字列が生成されます。

## has_secure_passwordの利用

Ruby on Railsでは`has_secure_password`メソッドを使用

元記事を表示

DeviseGemを使わないログイン機能の実装方法

# DeviseGemを使わないログイン機能の実装方法

Webアプリケーションにおいて、ユーザー認証機能はセキュリティとユーザーエクスペリエンスを確保するために不可欠です。しかし、すべてのプロジェクトでDeviseGemなどの認証フレームワークを使用するわけではありません。ここでは、DeviseGemを使わない基本的なログイン機能の実装方法を解説します。

## サインインとログインの基本的な仕組み

### セッションの利用

– ユーザーがログインすると、そのユーザーのIDがセッション変数に保存されます(`session[:user_id] = @user.id`)。
– ブラウザはこのセッション情報を受け取り、以降のリクエストにセッションIDを含めてサーバーに送信します。
– サーバー側はセッションIDを確認し、それに基づいてユーザーがログイン済みであるかどうかを判断します。
– ユーザーログアウトして際は、ユーザーのIDをセッションから剥奪します(`session[:user_id] = nil`)。

### カレントユーザーの設定

– セッションに保存されているユーザー

元記事を表示

Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

## 概要
ruby on railsのDocker開発環境構築中に上記エラーが発生しました。
いくつかの問題が複合していて、解決までにちょっと時間がかかってしまったので、備忘録がてらに記録を残しておいて、後続の誰か参考にしてくれたらな〜という目的でゆるく解決方法を記載しておきます。

## 解決手順(要約)
① socketファイルがどこにあるか確認してdatabase.ymlに設定する
② database.ymlのhost名を変更する

## 解決までの道のり

以下のようにdocker-compose.ymlを定義して、rails new ~で各種ファイルを生成し、あとはrake db:createすればサーバー起動できる…というところまで来ていました。(railsのバージョンは7.1.2)

“`yml:docker-compose.yml
version: ‘3’

services:
db:
image: mysql:5.7
environment:
MYSQL_USER: ${MYSQL_USER_NAME}
MYSQL_

元記事を表示

【ActiveRecord】find・find_by・whereの違いと主要メソッド

# 【ActiveRecord】find・find_by・whereの違いと主要メソッド

Ruby on Railsの強力な機能の一つであるActiveRecordは、データベースの操作を簡単かつ効率的にするORM(Object-Relational Mapping)システムです。この記事では、ActiveRecordの基本的な使い方、特に`find`、`find_by`、`where`メソッドの違いに注目し、New、Create、Update、Delete、Saveといった主要メソッドの概要を解説します。

## ActiveRecordの概要

ActiveRecordは、Ruby on RailsのMVCモデルの中でモデル層を担当し、データベースとの間でデータをやり取りする役割を果たします。SQLを直接書く代わりに、Rubyのメソッドを使用してデータベースを操作することができます。これにより、コードの可読性が向上し、データベース操作が容易になります。

## find・find_by・whereの違い

### findメソッド

`find`メソッドは主にIDに基づいてレコー

元記事を表示

勉強記録ウェブアプリ作成の軌跡 2:フロントエンド設計

# 概要
「【Rails×React】UberEats風アプリを作りながら、SPA開発を学ぼう」を使って学んでいく上で自分で勉強記録アプリを作りたいと思ったので、完成するかは置いといて、とりあえず学んだことを自分が作りたいものに置き換えて考えていく。

# 内容
前回の記事で決めたデータを元に画面とコンポーネントの設計を行う。
画面に対応するコンポーネントはデータを扱うため、最初の設計を誤ると保守性の低いフロントエンドのコードになるため注意が必要。
コンポーネントというのは、ボタンや画像などのUIのパーツや部品のこと。

# コンポーネント
### 「データを扱うコンポーネント」 Container Component
こちらは親コンポーネントとして複数の子コンポーネントにデータを渡す役割がある。
### 「受け取ったデータをただ表示するためのコンポーネント」 Presentational Component
これはボタンやモーダルなどが含まれる。

コンポーネントがこの2種類に分けられている最も大きい理由として、子コンポーネントの再利用性を高めることが挙げられる。
例えば、複数のペー

元記事を表示

【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、サービスを公開したり修正したりした後に、誤字が見つかるという経験をしたことがあるのではないでしょうか?公開した直後ならまだよいのですが、公開数年を経て発見される誤字もあります。特に大きなサービスになると、この誤字を何年も放置してしまっていたのか……と冷や汗ものです。

そんなことを防げるサービスをつく

元記事を表示

OTHERカテゴリの最新記事