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

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

【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)

~中略

元記事を表示

【Rails】RAILS_DEFAULT_LOGGERを使用できない

## はじめに
Railsのアップデート中にRAILS_DEFAULT_LOGGERを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
コード
“`ruby
RAILS_DEFAULT_LOGGER.info “xxx”
“`

エラー文
“`ruby
uninitialized constant RAILS_DEFAULT_LOGGER
“`

## 解決方法
以下のように修正します。
“`ruby
Rails.logger.info “xxx”
“`

## 参考
https://stackoverflow.com/questions/11585296/uninitialized-constant-rails-default-logger

元記事を表示

オリジナルアプリ 〜wants〜 作成過程(リクエスト機能編)

### 本日の進捗報告: Wantsアプリのリクエスト機能実装(リクエスト投稿まで)

1. リクエストコントローラー・ビューの作成
1. リクエストモデルの作成
1. リクエストテーブルの設計とマイグレーション
1. ビュー新規依頼ページへのリンク作成
1. 画像保存用にactive storageの設定
1. カテゴリーなどの選択画面用にactivehashを設定
1. 投稿後トップページに戻る設定
1. バリデーションとエラーメッセージの表示の修正

色々つまづいた所もあって大変だったけどうまく動作できた時は感動した。まだまだ道程は長いけど12月までに完成させます!!
## 試作段階のビュー
![スクリーンショット 2024-10-29 18.30.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763893/59049062-6a01-0cfb-0f9b-858fb06e710f.png)
![スクリーンショット 2024-10-29 18.30.44.png](https://qiit

元記事を表示

【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】初学者向け-開発の流れについて④ 一覧、新規作成、参照、更新、削除

元記事を表示

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

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです
# 個人メモ
– カスタムヘルパー
自作のメソッドをカスタムヘルパーと呼ぶ
Railsでは自動的にヘルパーモジュールを読み込む
したがって自動的に全てのビューで利用できるようになっている
– コンストラクタ
クラスからインスタンスを生成する処理のこと
ex) s = String.new(“a”)
– リテラル
“”で囲んだものを文字列リテラル、123などを数値リテラルと呼ぶ
– 2つのメソッド
クラスが直接呼び出すメソッドをクラスメソッド、インスタンスが呼び出すメソッドをインスタンスメソッドと呼ぶ
– ユーザークラスの作成について
ユーザー名とメアドについてのアクセサー
attr_accessor :name, :email
アクセサーを作成すると、そのデータを取り出すメソッド(getter)と、データに代入するメソッド(setter)をそれぞれ定義してくれる
– シンボル
シンボルはRailsではラベルとして用いられる
追加的な構造を持たない(代入などができない)文字列みたいなもの

元記事を表示

MiniMagick gemのバージョンを変更したら動かなくなった。そのため5.0.1から4.5.1へ修正する。

## はじめに
Railsのバージョンアップ中にて
プロジェクトで画像処理のためにMiniMagickを使用していて、特定のバージョンでエラーが発生しました。ここではエラー内容と、その解決のためにMiniMagickのバージョンを変更した方法について共有します。

## 発生したエラー
まず、コード内で以下のようなエラーが発生しました:

mogrify: unrecognized option `-run-command’ @ error/mogrify.c/MogrifyImageCommand/5941.

このエラーは、MiniMagickが`mogrify`コマンドで`-run-command`オプションを使用しようとしたときに発生しました。`-run-command`はサポートされていないオプションであるため、エラーが発生したと考えられます。

## 環境
– Ruby: 3.2.3
– MiniMagick: 5.0.1

## エラーの原因と対応
エラーメッセージから、バージョン互換性に問題がある可能性を疑いました。調査の結果、MiniMagickのバージョンを

元記事を表示

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

## 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】初学者向け-開発の流れについて④ 一覧、新規作成、参照、更新、削除

元記事を表示

【devise】新規登録とメールアドレス変更で異なるテンプレートを使用する

## はじめに
deviseでメールアドレス変更を行おうとすると、デフォルトでは認証メールは新規登録と同じテンプレートを使用する様になっていました。
しかし、新規登録とメールアドレス変更でメールの内容を変更したい。試行錯誤して設定を行ったので、備忘録に。

テンプレート変更の設定にフォーカスした内容になっていますので、deviseでのメールアドレス変更の基本的な詳しい設定方法は他の記事をご覧ください。
私は[rails deviceを使用したメールアドレス変更](https://qiita.com/mone_pi/items/ca132baa3f432947fc96)を参考にしました。

## 環境
* rails 7
* **devise導入済み**
* **メール認証を含む新規登録〜ログイン**
* **メールアドレス変更実装済み**

## やり方

deviseをオーバーライドしてメールアドレス変更用の認証メールの`confirmation_on_edit_address_instructions`を追加する

“`app/controllers/users/answer

元記事を表示

`link_to`をブロックで囲った際に適用範囲がおかしい

# 問題
* `

` の範囲をリンクにしたくて以下のように実装していたが何故か `link_to` が反応しない
* デベロッパツールで確認してみると `div` が `` に囲われていないという想定外の表示となっていた
* 当然 `

元記事を表示

(本番環境)Rails における `devise + Omniauth` の Google 認証の導入メモ

# はじめに
* こちらの記事の通りにローカルで試験的に Google 認証が出来たことを確認済みな状態が前提となっております

https://qiita.com/nakad119/items/9caa1ce803185b93fe85

* 「本番環境」 = 「デプロイ済みの Web アプリがある」という前提となっております
* 私は Render に web アプリをデプロイしております


# 本番の URI を追加するだけ
* やることは単純で Google Cloud コンソールで公開した Web アプリの URI を追加するだけ
* Google Cloud コンソールでは `http://localhost:XXXX/` のようにローカルだけでの利用を許可している状況だとデプロイした Web アプリでは利用許可が降りていません

## 現状
* 現状はローカルホストだけでの利用を許可されているためデプロイしたアプリで Google 認証を利用しようとすると以下のような画面が表示されるかと思います

元記事を表示

OTHERカテゴリの最新記事