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

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

全てのモデルを列挙する

# やりたいこと

全てのモデルを列挙したい。

# 方法

“`rb
# 開発環境だとクラスが自動読み込みされる。
# このままだと読み込み済みのモデルしか列挙できないので、明示的に一括読み込みしておく。
# 規模が大きい Rails アプリケーションだと時間がかかる。
Rails.application.eager_load!

# 全てのモデルを列挙する。
# ApplicationRecord のような抽象クラスは除外する。
ActiveRecord::Base.descendants.reject(&:abstract_class?)
“`

# バージョン情報

※ 現時点での最新のバージョンではありません。

“`rb
RUBY_VERSION
#=> “3.1.2”

Rails.version
#=> “7.1.4”
“`

元記事を表示

【Rails】RSpecでのテスト時に詰まったところ~画像の添付、postリクエスト時のパラメーター付加など~

## はじめに
ここまる2日かけてRSpecを使ったテストコードを書いていました。
その中で、’この内容をテストしたいけどどう書いたらいいんだろう…?’と思うものがたくさんあったので、まとめておきます。

## 少し悩んだテスト内容と記述方法
### Model Spec
#### user_idとpost_idのペアにつけている一意性制約のテスト
“`ruby
require ‘rails_helper’

RSpec.describe Like, type: :model do
context ‘同じポストにいいねしようとした場合’ do
let!(:user) { create(:user) }
let!(:post) { create(:post) }

let!(:like1) { create(:like, user: user, post: post) }
let!(:like2) { build(:like, user: user, post: post) }

before do
like2.save

元記事を表示

Docker, docker-compose, rails を使って、HelloWorld を表示する。

## 目的
docker, docker-compose, rails を使って、HelloWorld を表示する。

## 環境
EC2 ubuntu

## 前提
・Vscode の Remote SSH を使う。
・3000 ポートのポートフォワーディングができている。

## 手順
(1)
“`
~$ sudo apt update
~$ sudo apt install docker.io docker-compose
~$ sudo systemctl start docker
~$ sudo systemctl enable docker
~$ mkdir rails_api
“`
vscode で rails_api フォルダに移動
“`
~/rails_api$ docker-compose –version
~/rails_api$ sudo apt remove docker-compose
~/rails_api$ DOCKER_COMPOSE_VERSION=2.20.3
~/rails_api$ sudo curl -SL https://githu

元記事を表示

docker, docker-compose を使って rails 開発を行うときのコマンド

## docker コマンド一覧
(1) 一覧
“`
$ docker ps -a
$ docker ps
$ docker images
“`
(2) ログ
“`
$ docker logs
“`
(3) 構築
“`
$ docker-compose stop
$ docker-compose down
$ docker-compose build
$ docker-compose up
“`
(4) 破壊
“`
$ docker container prune
$ docker images prune -a
$ docker images prune
$ docker system prune -a
$ docker volume prune
“`

## rails コマンド
(1) ファイル生成
“`
$ docker-compose run web bundle exec rails generate model Hello
$ docker-compose run web bundle exec rails generate

元記事を表示

Swaggerを使って RubyonRails ✖︎ WebAPI 作成してみた

# はじめに
現在友人依頼の作付計画アプリを作成中です 🌱
作物マスターのAPIあったら楽だなーと思いつつ(あるっぽい👀)
根幹機能なのでやめときました💦

seedファイル使って手動でぽちぽちマスター登録をしているので、せっかくならWebAPIに挑戦してみようと思います!

初心者ですので、間違い等ありましたらご指摘いただけますと幸いです!

# この記事の目標
– RubyonRailsのseed機能を使って作成した作物マスターをWebAPIで公開する

# この記事でやらないこと
– 前提知識や細かい設定の説明

前提知識などは、下記の記事を参考にしています!

https://qiita.com/KNR109/items/d3b6aa8803c62238d990

https://qiita.com/KNR109/items/7e094dba6bcf37ed73cf#commponents

# Swagger
SwaggerとはOpenAPIを利用しREST APIを設計するために使用するツールセットのことです

公式ドキュメント

https://swagger.io/do

元記事を表示

Dockerで「docker compose exec web bin/dev」がうまくいかないときの対処法②

## 初めに

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

## 起こったこと
config/initializers/ransack.rbを記述すると
「docker compose exec web bin/dev」が上手くいかなくなった

## 対処法
“`:ターミナル
docker compose restart
“`
これです。この後は上手くいきました。
ちなみに
“`:ターミナル
docker compose down
“`
のあともう一度docker compose upをしても上手くいかなかったです。
あくまでも再起動するのが大事みたいです。

元記事を表示

findとfind_byの使い分けについて

## 前提
内容は浅いですが、個人学習中の備忘録を目的として残しておきます。

## モデル.find
“`ruby
User.find(1)
“`

findメソッドで取得する値は、DBに存在している前提で実行されるため、値が存在しない場合は、`ActiveRecord::RecordNotFound`という例外が発生する。

### 用途
必ず該当する値が存在しなくてはいけないモデルに対して使う。
万が一、存在しない場合は例外が発生するため、例外処理も実装しておく必要がある。

## モデル.find_by
“`ruby
User.find_by(email: ‘example@aaa.com’)
“`

find_byメソッドは、該当する最初の値が取得されるが、値が存在しない場合は例外を発生させずnilを返す

### 用途
あらかじめ、値が存在しないケースがあると判断できている場合に使う。

#### find_byとwhereについて
“`ruby
User.find_by(email: ‘example@aaa.com’)
User.where(email

元記事を表示

RSpecでCapybaraのvisitメソッドを実行するとSelenium::WebDriver::Error::WebDriverErrorが出てしまう件

## エラー
“`
Selenium::WebDriver::Error::WebDriverError
“`
RSpecで`capybara`のvisitメソッドを使用時にエラーが出た。
どうやら、WebdriversがブラウザドライバーであるChromedriverと対応可能なバージョンが見つからないためエラーが起きているよう。

(Webdriversはブラウザを自動操作するためのブラウザドライバーを管理するRubyのテストフレームワーク)

<エラー時のgemファイル>
“`ruby
group :test do
gem ‘capybara’, ‘3.38.0’
gem ‘selenium-webdriver’, ‘4.8.3’
gem ‘webdrivers’, ‘5.2.0’
end
“`

## 解決方法
Webdriversを削除しcapybaraとselenium-webdriverを特定のバージョン以降に設定する

“`ruby
group :test do
gem

元記事を表示

【Rails】メンション付きコメントがあった際にメールで通知をする方法

## はじめに
Webアプリでよくある、@username でメンション通知をできる機能を実装したので、やり方を残しておきます。

### 学べたこと
– `after_create`などのコールバックを使う際のデータの扱い方
– メールを送りたいときのメソッドの作り方
– 絶対リンクの作り方

## やりたいこと
ポストに対してのコメントで’@username’と記述した際にメンション通知を飛ばしたい。
メール送付は非同期処理で行いたい。

### 前提
– Redisとsidekiqを導入

## やり方
### 方向性
1. メンション通知用のメソッドをMailerを作って実装
1. viewの作成
1. `after_create`を使って、Commentモデル内にメール送付のメソッドを定義
1. 保存したコメントの内容から’@’に反応してusernameを検知
1. もしメンションされていたら、メールを送信

### Mailerの内容
“`ruby
class CommentsMailer < ApplicationMailer def mention

元記事を表示

MVCモデルを覚える

Ruby on RailsのMVCモデルについての走り書きです。悪しからず…

# MVCモデル
Railsで登場するモデル/ビュー/コントローラーという役割の総称
RailsをはじめとするWebアプリケーションシステムの処理の構造を表している

特徴
・分離された役割により、コードの可読性や保守性が向上する
↳ただし、分割されているので処理速度が低下、分割作業の発生がある
・コンポーネントの疎結合性により、再利用や保守が容易になる
・各コンポーネントを独立してテストできるため、品質管理やバグの早期発見が可能です
・役割で効率的にアプリケーション開発が行える
・独立性が非常に高く、変更などの対応も柔軟に行なえる

※※手作りMVCモデル※※
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864659/360fc842-2213-6a83-9ea6-83b1219a8110.png)

# M(モデル)
モデルとは、DBとデータをやり取りしたり、データの登録・更新・削除などの

元記事を表示

【初心者向け】UbuntuでRailsアプリを本番環境でデプロイするためのマニュアル

# 本記事の目的

 プログラム(Ruby on Rails)を触ってきたが、そろそろデプロイしてみたいと思ったときに、色々な記事とにらめっこしながら苦労してなんとかデプロイに漕ぎつけたので、もっと簡単にまとめられたものがあればいいなと思い、本記事を作成いたしました。

# 参考記事

たくさん見たのでどれがどれだか覚えていません。

***

 かなり初心者を意識して本記事を書いたので、Qiita初心者のためにこういうものを書いておきました。

Qiita記事の見方

+ ファイルを編集する場合
+ 1行目(?)にファイル名が書いてある
+ 2行目(?)からファイルに記述などする内容が書いてある

〇具体例

“`txt:ファイル名
ファイルの中身
“`

+ コマンドライン(ターミナル・コマンドプロンプトなど)を編集する場合
+ 先頭に$マークがついている
+ コピペするときに$マークを外す必要がある

〇具体例

“`
$ echo ‘Hello, World’
“`
「$」がコマンドラインを表す記

元記事を表示

Railsでのユーザー削除の実装方法

# はじめに
この記事では、Railsでユーザーを削除する方法について紹介します。
追加で削除時に確認ダイアログを表示させ、削除が成功したかどうかを通知する仕組みも紹介します。

# 1. ルーティング設定
config/routes.rb ファイルで、destroy アクションに対応するルートを設定します。
“`
resources :users, only: [:index, :show, :destroy]
“`

# 2. コントローラーの実装
まず、削除処理はコントローラーの **destroy** アクションで行います。削除が成功した場合には一覧画面へリダイレクトし、失敗した場合には個別詳細画面にリダイレクトしてエラーメッセージを表示します。
“`
def destroy
if @user.destroy
redirect_to users_path, notice: ‘ユーザー情報が正常に削除されました’
else
redirect_to user_path, alert: ‘削除に失敗しました’
end
end
“`
***補足***

元記事を表示

【Rails】json形式のレスポンスを整形して、画像ファイルのURLをフロントに渡す方法

## はじめに
Ajaxでコメント一覧の表示・コメント投稿の機能を実装する際に、コメントした人のアバターも入れたかったのですが、やり方が分からなくて苦戦したので実装方法を残しておきます。

## やりたいこと
javascriptからaxios.getでリクエストを送った際に下記の情報がほしい
– commentの内容
– commentした人のusername
– commentした人のavatar

## 状況
– 関連するモデル
– Userモデル
– Commentモデル
– Proflieモデル
– 各モデルの関連性
– User has_many commnets
– User has_one profile
– Post has_many commnets
– 各モデルに紐づく要素(今回の件に関係するところのみ)
– profilesテーブルにavatar画像がある
– commentsテーブルにcontent(コメントの内容)がある
– usersテーブルにusernameがある

## やり方
#

元記事を表示

【Rails】gem ‘kaminari’ と Tailwind CSS + daisyUI でページネーションをカスタマイズする

# はじめに
こんにちは、ゆうき(@yuki31100725)と申します。
現在、プログラミングスクールに通ってRuby on Railsを学習しております。

:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りのある場合がございます。
もし間違いがあればご指摘いただけますと幸いです。
:::

# 記事の概要
gem ‘kaminari’を導入してページネーションを実装した際、導入済みだったTailwind CSS (+ daisyUI)を用いてレイアウト調整を試みました。

本記事では、実装例とともにレイアウト調整の手順についてご紹介できればと思います。

# 記事のゴール
gem ‘kaminari’でページネーション実装後、Tailwind CSS (+ daisyUI)を用いて下記のようなレイアウトにすることを目標としています。

【レイアウト調整前】
View側の繰り返し処理に対応してJavaScriptで動的にidを取得する方法

## はじめに
インスタ風のアプリを作成している中で、Ralis側で繰り返し処理をしている箇所にJavaScriptでcssクラスをつけたり外したりする処理 などの実装に苦戦したので、実装方法を整理してアウトプットします。

## やりたいこと

記事の一覧画面でAjaxを使って、いいねができるようにしたい

### 問題
show.htmlのようなpost_idが一意に決まっているようなページをJavaScriptで操作するのではなく、
index.htmlのようなpostがたくさん表示されているページから各ポストのidを個別に指定して操作していく実装がわからなかったです。

#### viewはこんな感じ
“`ruby
– @posts.each do |post|
.card
= image_tag post.user.profile.avatar
= show_posttime(post)
= post.user.username

– post.images.each do |image|
= image_tag image

元記事を表示

【Rails】いいね機能の実装ー中間テーブルとはなにか?ー

## はじめに
初学者向けのRails講座には、大抵の場合いいね機能の実装が含まれていると思います。
ただ、いいね機能を実装するための”中間テーブル”は、概念的で理解しにくいところがあるため、自分の整理のためにもアウトプットします。

### 前提
– インスタ風のアプリを作成
– userがpostを投稿する感じ
– 他のuserのpostにいいねできる機能を作りたい

### 何がしたいのか
– いいね機能を実装したい
– postの一覧画面(post/index.html)からいいねできるようにしたい

### どうする必要があるのか
– 中間テーブル(likesテーブル)を作成する
– 一意性制約をつける
– likesテーブルを通していいねしたPostを取得できるようにする
– routesの工夫

## 実装方法
### 中間テーブルを作る
1. 普段通り`rails g model Like`でモデルを作る
1. マイグレーションファイルを編集
1. reference でuserとpostを追加
1. 複合インデックスを追加し、一意性制約をつける
1.

元記事を表示

PagyとTurbo Framesで手動無限スクロールをセットアップするための完全ガイド

最近仕事で、pagyを使ってボタンを押すたびに情報が出力される手動の無限スクロールを実装する際に苦労したので同じように苦労している方のために説明したいと思います。
# 参考にした実装
https://www.colby.so/posts/pagination-and-infinite-scrolling-with-hotwire

# 完成デザイン
![スクリーンショット 2024-09-16 22.45.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524128/423f0358-9fcc-87ca-c85d-ae575863cf71.png)
moreボタンを押下すると表示が増え、取得した情報がなくなるとボタンも消えます。
![スクリーンショット 2024-09-16 21.26.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524128/af72ecf0-9047-1c28-2ad6-1376be

元記事を表示

コメントに対する返信機能 モデルの親子関係を自己結合で実装

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

## 記事投稿の背景
ここではXのクローンサイトを作成中に実装した機能についてご紹介します。投稿に対してコメントをする機能までは実装していたのですが、コメントに対する返信機能を実装する時に実装方法が分からずに調べた内容となります。

## 実装したコードの紹介と解説
“`ruby:マイグレーションファイル
class AddParentIdToComments < ActiveRecord::Migration[7.0] def change add_reference :comments, :parent, foreign_key: { to_table: :comments } end end ``` - `parent_id`というカラムをcommentsテーブルに追加します。 - `foreign_key: {to_table: :comments}`の部分でこのカラムにforeign_keyとしての制約を与え、そのキ

元記事を表示

cannot load such file — sassc のエラー

# エラー文
ローカルホストを立ち上げたら
“`
cannot load such file — sassc
“`
のエラーが出た

# 解消法
VSCodeの左のツリーから Gemfileを探して,
“`
gem ‘sassc-rails’
“`
を追記.
その後ターミナルで
“`
bundle install
“`
すればインストールされて使えるようになる.ローカルホストの立ち上げ直しが必要?

元記事を表示

Rails6 gem serviceworker-rails で PWA化

# はじめに
WebアプリケーションをネイティブなアプリのようにできるPWA化に憧れて、実装してみました!
紆余曲折しましたがなんとか完成!
忘れないうちにまとめておこうと思います!

おおまかな流れは、こちらのREADMEを参考にしています↓

https://github.com/rossta/serviceworker-rails

# 前提
Ruby 3.1.2
Rails 6.1.7.7

Rails6以降の記事が少なくて…!苦戦しました💦

# Serviceworkerの導入

#### gem導入

“`Gemfile.
gem ‘serviceworker-rails’
“`

“`
$ bundle install
“`

ファイルはコマンドを実行すれば、自動作成してもらえます

“`
$ rails g serviceworker:install
Running via Spring preloader in process 31804
create app/assets/javascripts/manifest.json.erb

元記事を表示

OTHERカテゴリの最新記事