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

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

ActiveRecordTips①~関連データの数による検索(n個以上、n個以下)

## はじめに
レコードを抽出する際に関連データの数で絞り込みたいことがありますが毎回「大体こんな感じだったけどあってたっけ?」てなるのでまとめておく。
ActiveRecordのTipsは今後も出していきたいので「こんな抽出はどうやるの?」的なものがあればコメントください!

## 関連データの数による検索
1対Nの関連付けのテーブル構造で子の数によっての検索
nとかmとかは数字に置き換えてください。
### 子レコードがない親レコードの抽出
“`ruby
Parent.left_outer_joins(:children)
.where(children: { id: nil })
“`

### 子レコードがn個以上
“`ruby
Parent.joins(:children)
.group(‘parents.id’)
.having(‘COUNT(children.id) >= ?’, n)
.select(‘parents.*, COUNT(children.id) as children_count’)
“`

###

元記事を表示

「React と Rails を利用してTODOアプリを作成しよう」をRails7とReactV18で実装

# はじめに
下記動画を参考に、Rails7はAPIとしてReactV18と切り分けてTODOアプリを実装しました。
ライブラリも2024年11月現在の最新バージョンを適用しているので若干記述を変更しています。

[【React on Rails】React と Rails を利用してTODOアプリを作成しよう(PART1)How to create a Rails project with a React](https://www.youtube.com/watch?v=yD0QotED6f8)

# 環境
### 対応OS
* Mac OS

### 対応バージョン
* Rails 7.1.5
* React 18.3.1

### 対応エディタ
* VSCode

ローカルで環境開発をしていきます。
RailsとReact、VSCodeはinstall済みとして進めていきます。
cssは`styled-components`のライブラリを使用します。

https://styled-comp

元記事を表示

「じゃあこのRailsアプリ、AWSにデプロイしといて」「へ!?やったことないんだけど」って人のためのAWS環境構築

# AWS環境をイチから構築し、Railsアプリをデプロイすることがゴール

プロジェクト名はテキトーに`neon-cyber`とします。(GPTが提案してくれた)
要件
– フレームワークはお馴染みのRuby on Rails(7系)
– WEBサーバー
– Sidekiqのサーバー
– データベースはMySQLの8系

これをAWSで実現するとなる時には以下の構成となる

– EC2インスタンス(AMI用+踏み台サーバー)
– ロードバランサー(CodeDeployでBlue/Greenデプロイをしたいから)
– EC2インスタンス(WEBサーバー)
– EC2インスタンス(Sidekiqのサーバー)
– RDSインスタンス
– Redisインスタンス

と、簡単に言ってもAWSで設定しなければいけないことは多岐に渡るので順番に解説していく。

– VPC
– サブネット
– ルートテーブル
– セキュリティグループ
– インターネットゲートウェイ
– NATゲートウェイ
– エンドポイント(EC2がS3にアクセスしたい場合)
– RDS

元記事を表示

【Rails】ターミナルに出てくる実行ログが全てじゃないゾ!!

どうもこんにちは。

今回は、Railsで開発を行っていたときに1時間くらい沼った問題についてお話します。

:::note warn
機能名は、サンプルを使用しています。(その方が分かりやすいと思うので。)
:::

# 何をしようとしていたか

とある機能の「複製」機能を開発しているとき、以下のようにルーティング・コントローラ・ビューを定義しました。

“`rb:config/routes.rb
resources :examples do
collection do
get ‘before_copy’
end
end
“`

“`rb:examples_controller
class ExamplesController < ApplicationController def before_copy copy_source_id = params[:id] before_copy_example = Example.find(copy_source_id) @example = bef

元記事を表示

結合メソッドとその発行SQL

## ActiveRecordのPreloadメソッドを使用した際の発行クエリ

(User 1:N Post)
“`ruby
User.preload(:posts)
“`
“`sql
SELECT `users`.* FROM `users`
SELECT `posts`.* FROM `posts` WHERE `posts`.`user_id` IN [ usersのidすべて ]
“`

(Company.preload 1:N User, Company.preload 1:N Department)
“`ruby
Company.preload(:users, :departments)
“`

“`sql
SELECT `companies`.* FROM `companies`
SELECT `users`.* FROM `users` WHERE `users`.`company_id` IN ※※※
SELECT `departments`.* FROM `departments` WHERE `departments`.`company_id` I

元記事を表示

【Rails】フロントエンド開発に必要なツールとその役割

## Node.js
RailsでJavaScriptを処理・ビルドするために必要。

“` powershell
# 確認
node -v
# インストール方法
# Node.js は コマンドでなく、サイトからインストールする
# 公式サイト (https://nodejs.org/)
“`

## yarn
JavaScriptのパッケージマネージャー。
Webpackや他のライブラリをインストール・管理するために使用。

“` powershell
# 確認
yarn -v
# インストール方法
yarn install
“`

## npm(Node Package Manager)
Node.js標準のパッケージマネージャーで、yarnと同じようにパッケージのインストール・管理を行う。
`yarn`は一部機能が高速であるため、`yarn`が推奨されることが多い。

“` powershell
# 確認
npm -v
# インストール方法
npm install <パッケージ名>
“`

## webpack
JavaScriptの「モ

元記事を表示

Railsルーティング入門

## 目次
[はじめに](#はじめに)
1. [ルーティングの基本](#1-ルーティングの基本)
1-1. [単一のルーティング設定](#1-1-単一のルーティング設定)
1-2. [リソースベースのルーティング](#1-2-リソースベースのルーティング)
1-3. [リソースベースのルーティングに関するオプション](#1-3-リソースベースのルーティングに関するオプション)
2. [ルーティングの応用](#2-ルーティングの応用)
2-1. [ネストされたリソース](#2-1-ネストされたリソース)
2-2. [名前付きルート](#2-2-名前付きルート)
3. [カスタムルーティング](#3-カスタムルーティング)
3-1. [メンバーとコレクション](#3-1-メンバーとコレクション)
3-2. [コントローラーのアクション指定](#3-2-コントローラーのアクション指定)
4. [ルーティングとSEO対策](#4-ルーティングとseo対策)
4-1. [フレンドリーURL](#4-1

元記事を表示

Active Storageとurl_forを用いた画像添付機能の実装(Ruby on Rails7)

## はじめに
RoRの学習をするために、尊敬するYouTuberの一人である以下の方の動画を参考に、ブログアプリを作成しました。このアプリに画像投稿機能を実装したので、自分の個人メモとして記事に残すことにしました。

## 開発環境
#### フロントエンド
– Next.js 15.0.2 (App Router)
– react 18.2.0 (TypeScript)

#### バックエンド
– ruby 3.1.6
– Rails 7.2.2

#### データベース
– sqlite3

## 実装手順

### **1. Rails側: APIの設定**

Railsで画像投稿を処理するために、`Active Storage` を使用します。

#### **1-1. 必要なGemのインストール**
`image_processing` のGemが必要です。`Gemfile`に追加してイン

元記事を表示

ロジックはviewに書かないで切り出してHelperメソッドで運用する

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

## 記事投稿の背景
Xのクローンサイトを制作している時に色々と躓いたので、知識整理も兼ねて記事として残すことにしました。

## 実際のコード – 変更前
私が制作していたアプリの場合、あるロジックは1箇所だけでなく、合計で**12箇所**ありました。
ロジックを切り出す前は変更の度に12箇所全てを修正しており、とても手間が
掛かり、時には変更漏れがあったりしました。
“`ruby:list.html.slim
– if current_user.present? # ツイートのユーザーとログインユーザーが共に所属するチャットルームが存在するかをデータベースから検索する
– room_with_tweet_user = Room.joins(:entries).where(entries: { user_id: [current_user.id, bookmark.twe

元記事を表示

Railsで親レコードの際にアソシエーション先の子レードが削除できない場合には削除されないようにする

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)からご相談をいただけますと幸いです。
以下のような問題を解決することができます。
– プロジェクトでRailsエンジニアが足りなくて困っている
– Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
– オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium

元記事を表示

Railsで親テーブル(親レコード)に対して子テーブル(子レコード)から複数の紐付きをする際のアソシエーション設定

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)からご相談をいただけますと幸いです。
以下のような問題を解決することができます。
– プロジェクトでRailsエンジニアが足りなくて困っている
– Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
– オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium

元記事を表示

flutterでandroidの実機デバッグをする方法

## ペア設定

`adb pair 192.xxx.xxx.xxx:34326`

## コネクト
`adb connect 192.xxx.xxx.xxx:43739`

## バックエンドとつなげない場合

バックエンドはrailsでlocalhost:3000起動中
実機デバイスからアクセスできない問題が発生

この時

`adb reverse tcp:3000 tcp:3000`
を行う

#### 参考

https://qiita.com/suruseas/items/42d5d9c5beffa6ebdd78

元記事を表示

CSRF対策:SPAとMPAでの対策方法について

# CSRF対策とは?

CSRF(Cross-Site Request Forgery)対策は、悪意あるサイトやスクリプトがユーザーになりすまして不正なリクエストをサーバーに送る攻撃を防ぐための仕組みです。簡単に言うと、「**ユーザー本人しかできない操作**」と「**不正なリクエスト**」を区別する仕組みを導入することです。

### CSRF攻撃が発生する仕組み
1. ユーザーがログイン中の状態で、悪意のあるサイトやメールに誘導される。
2. 悪意のあるサイトに埋め込まれたスクリプトが、ログイン状態のセッションを利用してサーバーに不正なリクエストを送信する。
3. サーバーはリクエストが正当かどうかを確認せず、そのリクエストに従ってしまう。
– 例えば、ユーザー本人が意図していないお金の送金や情報の変更など。

### CSRF対策の基本的な仕組み
CSRF対策として、**CSRFトークン**を使うのが一般的です。CSRFトークンとは、「このリクエストはユーザー本人から来ていることを確認するための特別なパスワードのようなもの」です。

#### CSRFトークンの流れ
1.

元記事を表示

今さら聞けない、gemとBundlerの基本と使い方

# はじめに

今回は、Rubyに関する gem、Railsについて簡単に復習した後、bundlerについて説明していきます。というのも環境構築の際、“`bundle install“`に何度もお世話になり、何をしてくれているのか気になったのがきっかけです。
環境構築時やgemを追加する度に何をしているのか曖昧なままなのは気持ちが悪いので今回まとめてみました。

gemやRailsに関しては、基礎過ぎて振り返ることがないかもしれませんが、意外と「知ってそうで知らなかったこと」もあるかと思います。

内容に不備あれば、ご指摘いただけると幸いです。

# 目次
– [gem](#gem)
– [Rails](#rails)
– [bundler](#bundler)

## gem

**gemとはRubyのライブラリのこと**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924509/4049bb25-055a-f348-6d4f-1df185005834.png)

gem

元記事を表示

アプリの機能に悩むあなたに

個人開発でアプリを作成するときに基本意識するのはCRUD
ここに関しては多くの人が認識済みかもしれませんが、

個人開発でアプリ作成時の機能に関して、
**「自分の得意分野から」攻めたほうが良い**と考えます
同時に
**相手の得意分野は避けたほうがいい**と考えます

何言っているかわからないかもしれませんが、
以前テレビで見てたあたしンちのエピソードにヒントがあります

あなたが開発するアプリをプレゼントと例えてみてください

それは「相手によろこんでもらえるかどうか分からない」という不安にもなります

コーヒー好きな人に下手なコーヒー贈ると、
**ああこれね**
その人のほうが、あなたより舌が肥えていたらそのような反応が返ってくるリスクがあります

同じように、ついアプリ作成時に高度な技術を付けないとで加点法形式で「あの人は、○○が好きだから」という根拠を求めてしまいます

少なくとも「あの人はきっとLINEが好きだから」でプラス1点(だからLINE通知を実装しました)
少なくとも「みんな、おすすめを求めている」でプラス1点(だからレコメンドを実装しました)

そのプラスが、なん

元記事を表示

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

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

# 個人メモ
– before_createコールバック
オブジェクトが作成されたときに呼び出されるコールバック
– メソッド参照
指定したメソッドを探索して実行を行うようにする記述法
ex) before_create :create_activation_digest
– メーラー
Usersコントローラのcreateアクションで有効化リンクをメール送信するために用いる
rails g コマンドで生成でき、テキストメール用のviewテンプレート、HTMLメール用のviewテンプレートが生成される
メールのテンプレートをビューと同じ要領で定義できる
– クエリパラメータ
URLの末尾で疑問符「?」に続けてキーと値のペアを記述したもの
– Time.zone.now
Railsの組み込みヘルパー
サーバーのタイムゾーンに応じたタイムスタンプを返す
– メタプログラミング
「プログラムでプログラムを作成する」
– sendメソッド
sendメソッドの引数によって、渡されたオブジェクトの呼び出

元記事を表示

RSpecでActionMailerのテストでdeliver_laterがある際の対処法

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)からご相談をいただけますと幸いです。
以下のような問題に対応することが可能です。
– プロジェクトでRailsエンジニアが足りなくて困っている
– Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
– オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium

元記事を表示

Rails7でTailwindCSSを導入する

## 1.プロジェクトの作成
“`bash
rails new rails_tailwind -j esbuild
cd rails_tailwind
“`

## 2.Tailwind CSSとForemanのインストール
Gemの追加
“`bash
bundle add tailwindcss-rails foreman
“`

Tailwind CSSのセットアップ
“`bash
rails tailwindcss:install
“`

これにより、以下のようなファイルが自動的に生成されます:
– `app/assets/stylesheets/application.tailwind.css`
– `tailwind.config.js`

## 3.確認用ページの追加
コントローラーとビューの追加
“`bash
rails generate controller Home index
“`

これにより、以下のファイルが生成されます:
– `app/controllers/home_controller.rb`
– `app/views/home/index

元記事を表示

gem ‘sorcery’ を使ってユーザー機能を実装してみた!

gem ‘sorcery’ とは
gem ‘sorcery’ は、Railsにおける認証システムの実装を支援するライブラリ。ログイン、ログアウト、セッション管理などの基本的な認証機能を簡単に追加できる。

### 今回はそんな’sorcery’を使って、ユーザー機能の実装を行なってみよう!

# gem ‘sorcery’導入

公式に導入方法が詳しく載っているので割愛します。

[公式チュートリアル](https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication)

# 実装概要

ゴールへ向けた大まかな実装手順を提示します。

## 今回の課題で必要なタスク

– ユーザー登録機能
– ログイン機能
– ログアウト機能
– gem ‘sorcery’を使用

### そこから明確にイメージできるものとそうでないものを区別しよう!

– イメージできるもの
– ユーザー登録
– ログイン
– ログアウト
– イメージできないもの
– gem ‘sorcery’

### ゴ

元記事を表示

Tailwind CSSでRailsのエラーメッセージをフォームの下に表示する方法

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)からご相談をいただけますと幸いです。
以下のようなお悩みを解決できます。
– プロジェクトでRailsエンジニアが足りなくて困っている
– Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
– オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=art

元記事を表示

OTHERカテゴリの最新記事