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

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

カーソル・ページネーションを手書きで実装する【Rails7】

## おことわり
こちらは、プログラミング初学者である筆者が、ポートフォリオ作成の際に得た知識を記録するものです。
誤りや改善点については、お手柔らかにご教示いただけますと幸甚です。

## 概要
シーク法を用いたカーソル・ページネーションを実装します。
kaminariなどで使用されているオフセット・ページネーションと比べて、高速に動作することが特徴です。実際のコードの後に、簡単な説明を記載します。

## 動作環境
| カテゴリー | 技術 |
| ———- | ——————————— |
| バックエンド | Ruby 3.2.2, Ruby on Rails 7.1.3.2 |
| データベース | MySQL 8.3.0 |
| インフラ | Docker |

## 用語の整理
– オフセット・ページネーション
– カーソル・ページネーション

元記事を表示

【超初心者ミス】ハッシュを設定してる際に『no implicit conversion of Symbol into Integer』がでてしまった

## 状況
hashを設定している際に上記のエラーが出てしまった。
`no implicit conversion of Symbol into Integer` を調べても原因がでてくるが解決法がピンとこない(試したが上手く行かない)

## 解決策
`return`で返り値設定しているか確認
下記の場合はhash値を指定しているメソッドの最後に **`hash`** をつけたら解決した
~~~ruby
def edit_hash
hash = {}

#メソッド内容

hash # ここの宣言が必要 ”return hash”を省略した記述
end
~~~

## 何故だったのか
Rubyの返り値には`最後に評価された値が返る`という暗黙のルールがある。
そのため返り値を”return”で指定しているのだが、上のコードのように省略して書かれているので初学者は忘れやすい。(忘れた)

~~~ ruby
# retrunを設定していない
def edit_hash
hash = {}
hash[:name] = ‘鈴木’
hash[:age] = 24
h

元記事を表示

Railsでパンくずリストを作成する方法 – Gretelを使った実装

# はじめに

こんにちは!
記事をご覧いただきありがとうございます。

本記事では、Railsでパンくずリストを作成する方法についてまとめます。

# 目次
1. [パンくずリストについて](#パンくずリストについて)
1. [手順](#手順)
1. [書き方](#書き方)
4. [最後に](#最後に)

# パンくずリストについて
パンくずリストとは、Webサイトの現在のページの位置を示すナビゲーションリンクのことです。ユーザーがどのページにいるかを視覚的に把握できるため、サイトのユーザビリティが向上します。今回は、Rails用のGretelというGemを使って、パンくずリストを簡単に実装する方法を以下にまとめています。

# 手順
#### Gretelをインストールする

まず、GretelをGemfileに追加し、インストールします。
“`ruby
# Gemfile
gem ‘gretel’
“`
インストールコマンドを実行します。
“`
bash
$ bundle install
“`
#### 設定ファイルを作成する
次に、以下のコマンドを実行して、conf

元記事を表示

Railsでデータ署名と暗号化を使ったAPIを構築し、セキュアに通信する方法

## はじめに
APIを提供する際、セキュリティが非常に重要です。この記事では、Railsでデータ署名と暗号化を組み込んだセキュアなAPIを構築し、クライアントとの安全なデータ通信を実現する方法を解説します。

## 1. プロジェクトの準備と秘密鍵の設定
### Railsプロジェクトの作成
まず、Railsプロジェクトを作成し、署名や暗号化に使う秘密鍵を設定します。

“`bash
# Railsプロジェクトの作成
rails new SecureAPI
cd SecureAPI
“`

### Secret Keyの設定
秘密鍵をRailsのcredentialsに追加します。これを使って署名や暗号化を行います。

“`bash
# シークレットキーを設定
EDITOR=”vim” bin/rails credentials:edit
“`
開いたファイルに以下を追加します。

“`yaml
secret_key_base: your_generated_secret_key
“`

## 2. 署名・暗号化サービスの実装
### データ署名サービスの作成
署名を生成

元記事を表示

Kaigi on Rails 2024 に参加してきた

[Kaigi on Rails 2024](https://kaigionrails.org/2024/) 参加してきました!
Qiita からは自分を含め3人が現地参加してきました。

https://x.com/nemunemu3desu/status/1849979399145390397

## 聞いたセッション (の一部) の紹介

めちゃくちゃ面白いものが多かったので、全部は書ききれないですが、たくさん書いてます。
2日目ガス欠気味だったので、1日目が多めです。

### 基調講演: Rails Way, or the highway

https://evilmartians.com/events/keynote-rails-way-or-the-highway-kaigi-on-rails-2024

Rails は 「Rails scales from HELLO WORLD to IPO」と呼ばれるが、その長い期間

元記事を表示

Rails ActiveRecordのクエリガイド

## テーブル構造

まず、以下のようなテーブル構造を例に説明します:

### usersテーブル
“`sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255),
age INTEGER,
premium BOOLEAN,
created_at TIMESTAMP
);
“`

### postsテーブル
“`sql
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
title VARCHAR(255),
content TEXT,
likes_count INTEGER DEFAULT 0,
created_at TIMESTAMP
);
“`

### commentsテーブル
“`sql
CREATE TABLE comments (
id SERIAL PRIMARY KEY,
post

元記事を表示

RailsのRansackとsort_linkで簡単に並び替え機能を実装する方法【Bootstrap対応】

## 背景
実務で検索機能を実装する際、データの並び替えもできるようにしたい、という要望がありました。既にRansackを使った検索機能は実装済みでしたが、並び替え機能も追加するために sort_link を活用することになりました。この実装内容をまとめて記録として残します。また、今回の実装はBootstrapを用いてスタイリングしており、基本的なデザインの調整も行いました。

## Ransackとは
Ransackは、Ruby on Railsにおいて簡単に検索機能を追加できるGemです。Ransackを使うと、条件に基づいたデータの検索ができるフォームや、指定したカラムによる並び替えが可能になります。検索ロジックを簡潔に書けるだけでなく、カスタムした条件にも対応しやすく、特に管理画面などでのデータ検索や並び替えが必要な場面で重宝します。

## sort_linkとは
sort_link は、Ransackが提供するメソッドの一つで、並び替えリンクを生成します。sort_link を使用することで、簡単に指定したカラムの昇順・降順で並び替えが可能になります。ボタンやリンクをクリッ

元記事を表示

RailsでGoogleスプレッドシートにデータを自動登録する方法:Google APIとGCPの設定ガイド

## 実装背景
今回の実装では、RailsアプリケーションからGoogleスプレッドシートへ自動的にデータを登録する機能を構築しました。この機能により、DBに保存せずスプレッドシートでデータを管理する必要があったため、その内容をまとめました。

## Googleスプレッドシートについて
Googleスプレッドシートは、Googleの提供するオンライン表計算ツールです。リアルタイムでのデータ共有や編集、さまざまなプラグインの活用ができるため、多くのプロジェクトでデータ管理ツールとして活用されています。また、APIを通じてプログラムからデータの取得・更新が可能です。

## GCPについて
GCP(Google Cloud Platform)は、Googleの提供するクラウドサービスプラットフォームであり、API管理やデータベース、AIツールなど幅広いサービスが提供されています。今回は、GCPでGoogleスプレッドシートと連携するために「Google Drive API」および「Google Sheets API」を利用し、Railsアプリからスプレッドシートにデータを登録します。

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第7章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– debugメソッドとparams変数を用いてページにデバッグ情報を表示できる
– Railsの3つの環境
test環境、debelopment環境、production環境がある
– resources :users
REST機能を実装するために必要な一文
名前付きルーティングとUsersリソースで必要になる全てのアクションを有効にすることができる
– params[:id]でidに対応したデータを取得することができる
– debuggerメソッド
ターミナルにrdbg(Ruby debugger)プロンプトが表示される
バグが発生した際、怪しい箇所に差し込めばシステムの状態を調査できる
– Gravatarでユーザー画像とメールアドレスを関連づけることができる
– form_withメソッドを用いることでユーザー登録フォームが作成できる
– Srtong Parameters
必須パラメータと許可済みパラメータを指定すること
これにより許可していない属性をparamsハ

元記事を表示

【Rails】MVCモデルについて

MVCモデルについて学習した内容をアウトプットとしてまとめてみました。
同じように学習されている方の参考になれば幸いです。

## 目次
1. MVCとは何か
2. なぜMVCが必要なのか
3. それぞれの役割
4. 実際の処理フロー

## 1. MVCとは何か

MVCは以下の3つのコンポーネントの頭文字をとったものです:

– **Model**(モデル):データベースやビジネスロジックの管理をする
– **View**(ビュー):データの表示をする
– **Controller**(コントローラー):ユーザーの入力を受け付け、ModelとViewの橋渡しをする

## 2. なぜMVCが必要なのか

### 2.1 MVCがない場合の問題

以下は、すべての処理を1つのファイルに書いた例です:

“`ruby
# 悪い例:すべての処理が混在している
def show_product
# データベース処理
product = database.query(“SELECT * FROM products WHERE id = 1”)

# 価格の計算処理
t

元記事を表示

ログアウトする方法

sessionはステートフルにするためのもの。ログイン、ログアウトの概念に縛られてはいけない。

user_idをハッシュ化しているものを保存している

# ログアウトをする方法を調べた。
>“`rb
>session[:user_id] = nil
>“`
https://qiita.com/you8/items/cedbb28aee17e409dc69#%E3%83%AD%E3%82%B0%E3%82%A2%E3%82%A6%E3%83%88%E6%A9%9F%E8%83%BD:~:text=session%5B%3Auser_id%5D%20%3D%20nil

* セッションをnilにする
* よく見る方法だ
* sqlで削除できるから行が空になる、行を空のままにしていいのだろうか?
>“`rb
> def destroy
> session.delete(:login_id)
> end
>“`
https://sado-tech.hateblo.jp/entry/2018/08/03/121033#:~:text=def%20destroy%0A%2

元記事を表示

Railsで`ckeditor`の`Sprockets::FileNotFound`エラーを解決する方法

## 問題の背景

Railsアプリケーションにおいて、`ckeditor`を利用する際に`Sprockets::FileNotFound`エラーが発生する場合があります。具体的には、次のようなエラーメッセージが表示されます。

Sprockets::FileNotFound at /admin/users/sign_in
couldn’t find file ‘ckeditor/init’ with type ‘application/javascript’
Checked in these paths: …

このエラーは、アセットパイプラインで`ckeditor/init`ファイルが見つからないために発生します。`ckeditor`のバージョンとSprocketsの互換性の問題が原因であることが多く、公式リポジトリでも議論されています([Issue #881](https://github.com/galetahub/ckeditor/issues/881))。

## 解決方法

この問題を解決するには、いくつかのアプローチがありますが、互換性のあ

元記事を表示

【Ruby on Rails】初学者向け-開発の流れについて⑦ ユーザー認証機能追加編

## Rails開発の流れについて

・Railsプロジェクトの作成とDockerの設定
[【Ruby on Rails】初学者向け-開発の流れについて① プロジェクトの作成編](https://qiita.com/y-kida/items/2c8634ceb28a93c84bc9 “Qiita Home”)

・Gem・DB設定とルーティング
[【Ruby on Rails】初学者向け-開発の流れについて② Gem・DB設定とルーティング編](https://qiita.com/y-kida/items/1d34bf72a3296579f213 “Qiita Home”)

・Bootstrapの導入
[【Ruby on Rails】初学者向け-開発の流れについて③ Bootstrapの導入編](https://qiita.com/y-kida/items/cb3723a344766fcaf15e “Qiita Home”)

・一覧、新規作成、参照、更新、削除画面機能の追加vol.1
[【Ruby on Rails】初学者向け-開発の流れについて④ 一覧、新規作成、参照、更新、削除

元記事を表示

PaizaCloudをさわってみた②

# PaizaCloudをさわってみた②

https://qiita.com/k_ozw/items/aa0aafa2a1990ab8b410

上記の続き。

# Railsで日記アプリを作ってみた。①

PaizaCloudで簡単なアプリを作成してみようと思い、実施。
PaizaCloud上にサーバを作成して、ターミナルを開いてコマンドを打っていく。

– 新しいアプリの作成

“`
rails new diary_app
cd diary_app
“`

– modelの作成
データベースのカラムはシンプルに`title` `content` `date`とします。
“`
rails generate model Diary title:string content:text date:date
rails db:migrate
“`
– controllerの作成
“`
rails generate controller Diaries index show new create edit update destroy
“`

– ルーティングの設定(config

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第6章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです
# 個人メモ
– Model
データモデルとして扱うデフォルトのデータ構造のこと
– Active Record
データベースとやり取りするRailsのライブラリ
Active Recordは、データオブジェクトの作成/保存/検索のためのメソッドをもつ
– マイグレーションコマンド
rails generate model モデル名 属性
マイグレーションファイルを変更すると後からデータベースの構造を変更することが可能
– マイグレーションの適用
rails db:migrate
– モデルに関するテスト
rails test:models
– 有効性(Validity)の検証
valid?メソッドでオブジェクトが有効かどうか確認できる
– 存在性の検証
validatesメソッドでpresence: trueを追加することで存在性を検証した
– フォーマットの検証
formatオプションを用いて、有効なメールアドレスにのみマッチする正規表現を組み立てることで検証した
– 一意性の検証

元記事を表示

【Ruby on Rails】初学者向け-開発の流れについて⑥ DBやモデル周りの整備 & バリデーション機能追加

## Rails開発の流れについて

・Railsプロジェクトの作成とDockerの設定
[【Ruby on Rails】初学者向け-開発の流れについて① プロジェクトの作成編](https://qiita.com/y-kida/items/2c8634ceb28a93c84bc9 “Qiita Home”)

・Gem・DB設定とルーティング
[【Ruby on Rails】初学者向け-開発の流れについて② Gem・DB設定とルーティング編](https://qiita.com/y-kida/items/1d34bf72a3296579f213 “Qiita Home”)

・Bootstrapの導入
[【Ruby on Rails】初学者向け-開発の流れについて③ Bootstrapの導入編](https://qiita.com/y-kida/items/cb3723a344766fcaf15e “Qiita Home”)

・一覧、新規作成、参照、更新、削除画面機能の追加vol.1
[【Ruby on Rails】初学者向け-開発の流れについて④ 一覧、新規作成、参照、更新、削除

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第5章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです
# 個人メモ
– モックアップ(ワイヤーフレーム)
ユーザーインターフェイスの概要を示したもの
– Bootstrap
– Bootstrapは bootstrap-sass gemを使ってRailsアプリケーションに導入できる
– Bootstrapにてnavberやnav、navbar-nav、navbar-rightクラスには特別な意味がある
– パーシャル(partial)
Webサイトのレイアウトにページごとの内容を挿入する
ex) <%= render 'layouts/header' %>
– renderと呼ばれるRailsヘルパーを用いてヘッダーの情報を置き換えている
– _header.html.erbというファイルを探してその内容を評価し、結果をviewに挿入している
– アセットパイプライン
SassとAsset Pipelineは、開発効率のために切り分けられたCSSの冗長な部分を圧縮し、本番環境に最適化した結果を出力する
– 名前付きルーティング

元記事を表示

Railsでの joins と includes の違いと使い分け

## 目次
– [joinsとは?](#1-joinsとは)
– [includesとは](#2-includesとは)
– [joinsとincludesの使い分け](#3-joinsとincludesの使い分け)
– [N+1問題とは?](#4-n1問題とは)
– [ベストプラクティス](#5-ベストプラクティス)
– [組み合わせて使用する例](#6-組み合わせて使用する例)

## はじめに

Railsのアプリケーション開発では、モデル間の関連性を活用してデータを取得することが多く、その際に利用するのが `joins` と `includes` です。この記事では、データベースから必要な情報を取得する際に使用する`joins`と`includes`について、具体的な使い分けとその効果を解説します。

## 1. `joins`とは?

`joins`は、内部結合 (INNER JOIN) を使用して、関連するテーブルからデータを取得するためのメソッドです。RailsのActiveRecordで`joins`を使用すると、関連付けされた複数のテーブルを結合してクエリを発行できま

元記事を表示

enumによって自動生成されるメソッド

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

### enumを使うときはモデルに下記のように書きます
“`:example.rb
enum state { aaa:0, bbb:1, ccc:3 }
“`
上記のようにコードを書くとメソッドが自動生成されます。

### 自動生成されるメソッド
“`
example.aaa? #現在のstateがaaaか確認するメソッド
“`

“`
example.aaa! #stateをaaaに変更するメソッド
“`
“`
example.state #現在のstateを取得するメソッド
“`
“`
example.state = stateを変更するメソッド
“`

元記事を表示

ActiveRecord::PendingMigrationError【Ruby on Rails】

ruby on railsでアプリケーション作成中に出遭ったエラーについての解決方法です。

今回、ターミナルからrails g migration Addカラム名Toテーブル名でカラムを追加したところ、テーブル名を間違えてしまったようでエラーになりました。

## エラーメッセージ
“`
Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=development
You have 1 pending migration:
20241025004905_add_user_id_to_tweers.rb
“`
マイグレーションは保留中、bin/rails db:migrate RAILS_ENV=developmentを実行してとのことなのでターミナルに入力。

続いて下記エラーが発生。
“`
StandardError: An error has occurred, all later migrations canceled: (StandardError)

~中略

元記事を表示

OTHERカテゴリの最新記事