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

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

Raspberry PiにRailsサーバーを立てて運用する

![P_20240924_172516.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72890/ea5e1765-6b95-a2c9-7e62-19679f63e5c9.jpeg)

# 初めに
家庭内で家族が使えるお小遣いアプリをRuby on Railsで作っているのですが、少しでも維持費を抑えるためにRaspberry Piを自宅サーバーにしてその上で動かすことにしました。
ただし、今回はあくまで自宅内でのサービス限定とし外部には公開しません。

# 前提条件
– Raspberry Pi 5を使用
– OSインストール、初期設定、ネットワークの設定は済んでいる
– 消費電力を抑えるために無線LANはOFFにしている
– sshで接続できるようになっている

# 下準備、環境アップデート
“` bash
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rsi-update
sudo rpi-upda

元記事を表示

Rspec で特定種類のテストだけを対象に before / after を設定する例

# 例

system test の全てのテストケースを対象に `before(:each)` の処理をさせる場合

`rails_helper.rb` に以下を設定

“`rb
RSpec.configure do |config|
config.before(:each, :type => lambda { |spec_type| spec_type == :system}) do

end
end
“`

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

元記事を表示

【Rails7.0】nomethoderror: undefined method ‘raw_filter’

## 概要
Rails6.1から7.0にアップデートした際、発生したタイトルのエラーに関して備忘録です

### エラー内容
“`
NoMethodError: undefined method `raw_filter’
“`

### 解決法
エラーが発生した時のスタックトレースを確認したところ `activerecord-import` が怪しかったのでリポジトリを確認したところ最新にしなくてはいけなかったので最新にしたところ解決した

元記事を表示

heroku run rails db:migrateでdbに接続ができないエラーが出た。

自分用備忘録です。初心者なので、間違っていることや、理解が違っていることがありましたら、教えていただけると幸いです。

## 問題
deviseでメール認証機能をつけたアプリをherokuにデプロイしようとした際、dbが見つからないというエラーが出た。

## 解決方法
database.ymlファイルのproductionに
“`url: <%= ENV['DATABASE_URL'] %>“` を追加する。

#### [解決までの過程(記録用)]
deviseで管理者機能をつけたアプリをherokuにデプロイ。
“`ruby
% git push heroku master
“`

HerokuのダッシュボードのResourcesからadd on設定
postgresqlを選択

データベースの設定が完了したので、
“`ruby
% heroku run rails db:migrate
“`

下記のエラーが発生しました。
“`ruby
Running rails db:migrate on ⬢ hidden-journey-8

元記事を表示

【Rails】Support for calling #default_scope without a block is removed.

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

## 問題
コード
“`ruby
default_scope order(“created_at DESC”)
“`

エラー文
“`ruby
Support for calling #default_scope without a block is removed. For example instead of `default_scope where(color: ‘red’)`, please use `default_scope { where(color: ‘red’) }`. (Alternatively you can just redefine self.default_scope.)
“`

## 解決方法
以下のように修正します。
“`ruby
default_scope { order(“created_at DESC”) }
“`

## 参考
https://stackoverflow.com/questions/3

元記事を表示

Railsガイドへコントリビュートするまでの経緯とそこから得られたもの

## はじめに

僕はエンジニアになって約1年です。

これまでOSS活動とは無縁だったのですが、ここ1ヶ月くらいでRailsガイドの日本語版・英語版の修正によるOSSコントリビュートが複数回できました。

日本語版(全4件)

https://github.com/yasslab/railsguides.jp/pulls?q=is%3Apr+author%3Akazuyainoue0124+is%3Aclosed+

英語版(全2件)

https://github.com/rails/rails/pulls?q=is%3Apr+author%3Akazuyainoue0124+is%3Aclosed+

どれも誤字脱字を修正しただけですが、この経験を通じてドキュメント修正がOSS活動の第一歩として最適だと肌で感じました。

そこでこの記事では、Railsガイドにコントリビュートするまでの経緯とその過程で得られたものについて、自らの経験をもとにまとめます。

– OSSってなんだか難しそうだけど挑戦してみたい
– ドキュメント修正

元記事を表示

全てのモデルを列挙する

# やりたいこと

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

# 方法

“`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)を用いて下記のようなレイアウトにすることを目標としています。

【レイアウト調整前】

  • OTHERカテゴリの最新記事