Rails関連のことを調べてみた2023年10月08日

Rails関連のことを調べてみた2023年10月08日
目次

Rails Tutorial 第12章

## 演習1
>この時点で、テストスイートが green になっていることを確認してみましょう。

rails testでGREENになることを確認してみてください

>表 12.1の名前付きルーティングでは、_pathではなく_urlを使っているのはなぜでしょうか?理由を考えてみましょう。(ヒント: アカウント有効化の演習11.1.1.1と同じ理由です。)

https://qiita.com/ryoheitakahashi/items/5daa27cb3dec4690852f
こちらを参考にしてみてください

## 演習2
>リスト 12.4のform_withメソッドで、@password_resetではなく:password_resetを使っている理由を考えてみましょう。

そもそも@password_resetで定義されたインスタンス変数が定義されていないため
## 演習3
>試しに有効なメールアドレスをフォームで送信してみましょう(図 12.6)。どんなエラーメッセージが表示されますか?

エラーになります。私の場合は以下のエラーが出ました

![スクリーンショット 20

元記事を表示

Railsのcheck_box

Railsの`f.check_box`でBoolean型のカラムの情報の保存の際にめちゃくちゃハマったのでメモ。

Boolean型のカラムの場合には、以下のように書く。
ここで注意なのは、値であるtrue, falseを文字列にすること。
Boolean型のtrue, falseだと、保存に失敗した後のエラー画面でデフォルトの値がそのまま入ることになってしまうことになり、ユーザーが選択したものが解除されてしまうということである。

“`erb
<%= f.check_box :is_send_mail, { class: "mt-4", checked: f.object.is_send_mail }, "true", "false" %>
“`

では、なぜ送られないかというとBoolean型のtrue, falseだとform_withでパラメーターがコントローラーに渡っておらず、値を入れることができないようになっていたため。

元記事を表示

【Ruby on Rails】concerns,helpers,decorators の使い方について考えてみた

# **はじめに**

皆様初めまして。プログラミングスクールで現在 Ruby on Rails を勉強しております、うーさんと申します。

2023 年 4 月よりプログラマーへの門を叩いてから早半年の月日が経ちました。

# 概要

`Ruby on Rails` には MVC 機能において、Model や Controller のコードの重複や肥大化(「`Fat Model`」,「`Fat Controller`」)を防ぐために、共通的なロジックを部分ごとにモジュールやオブジェクトとして分離する役割を果たす `concerns`, `helpers`,`decorators` といったファイルや概念が存在します。

とは言っても、結局それって何を書くの?どのファイルにどのようなメソッドを書けばいいのか?と疑問に思いましたので、深掘りも兼ねてこの度初めて技術記事にさせていただきました。

::: note warn
? 誤った知識を記載してしまう場合がございます。
至らぬ点等何かございましたら、お手数ですがご教示いただけますと幸いです。
:::

# concerns

元記事を表示

railsのテーブル結合メソッドの使い分け

# はじめに
テーブルを結合するための複数あるメソッドの使い分けがあやふやなのでここで調べたことなどをまとめます。

得られる結果が同じだからと言って意識しないでいると思わぬところで足を掬われそう。

# joins
**結合先のテーブルの情報を使わない時に使う。→メモリ削減**
内部結合`INNER JOIN`を行う。

– 結合先のテーブルで絞り込むことが可能
– 結合先のテーブルの情報を取得できない

“`joins.rb
User.joins(:user_profiles)
# 発行されるSQL
SELECT “users”.* FROM “users” INNER JOIN “user_profiles” ON “user_profiles”.”user_id” = “users”.”id”
“`

# preload
**結合をしたくない時に使用する→テーブルの規模が大きく、動作が極めて重くなる場合(has_many関係)や、LEFT JOIN時のnullを発生させたくない場合など**
SQLを二回発行し、擬似的にJOINしてデータを取得する。

– 結合先のテーブルで

元記事を表示

【Rails】ransackを使用した検索機能の作成

Railsにてransackというgemを使用して投稿一覧にて検索機能を作成。備忘録として記述。

検索機能を使わない場合は公開中の全投稿を表示、検索機能を使用した場合は検索結果を表示していきます。
フォロー機能も実装しているので、今回は、「都道府県」「ジャンル」「フォローしている人かどうか」で検索できるようにしていきます。

※新規投稿する際に都道府県、ジャンル、投稿の公開・非公開を選択して投稿する仕様にしています。(都道府県、ジャンル、投稿の公開・非公開はenumにて管理)

・都道府県
“`
enum prefecture: {
hokkaido: 0,
aomori: 1,
~~~~~~~~~~~~ 省略 ~~~~~~~~~
kagoshima: 45,
okinawa: 46,
}
“`

・ジャンル
“`
enum location_genre: { food: 0, loc

元記事を表示

【Rails】PDFを登録できるようにする

# はじめに
プログラミングを勉強して2か月ほどです。
初心者なので間違っているところがあれば、ご指摘いただけると幸いです。
※@tohonozo(とほ のぞ)さんの記事を参考に作成しました。
 とても分かりやすく参考になりました。
 ありがとうございます。

# PDFを保存したい
今回、私が作成しているアプリケーションでPDFを保存できるようにしたかったのでやってみました。
Active Sorageなどで画像の保存はやったことはありましたが、PDF保存は初めてでした。
いろんなところで躓いたので、この記事にまとめておこうと思います。

# Let’s start!!!
## 最初にCloudinaryに登録
このリンクから登録をはじめましょう。

https://cloudinary.com/

右上のsign up for freeを押すと、登録画面に飛びます。

## PDFファイルを投稿するために簡単なアプリを作成
今回はItemモデルを使用します。

### モデルとコントローラーを作成
`$ rails g model item`
`$ rails g controll

元記事を表示

Vtuberの歌枠データベースを作ってみた話

## 目次
[1. はじめに](#1-はじめに)
[2. 作ったアプリについて](#2-作ったアプリについて)
[3. 開発の流れ](#3-開発の流れ)
[4. プロジェクトを通して学んだこと](#4-プロジェクトを通して学んだこと)

## 1. はじめに
Vtuberが歌枠で歌った曲を検索できる歌枠データベースを制作したのでその記録を記します。

作成したアプリはこちらのリンクから見ることができます。

https://song-list.piny940.com

## 2. 作ったアプリについて
[2-1 アプリの概要](#2-1-アプリの概要)
[2-2 アプリの3つの特徴](#2-2-アプリの3つの特徴)
[2-3 アプリの画面](#2-3-アプリの画面)

### 2-1 アプリの概要
各チャンネルごとに、今までに歌った曲の一覧を見ることができるようになっています。
曲名と歌手名で検索をする他、詳細検索からは配信日や配信のタイトル名で絞り込むことができるようになっています。

![アプリ画面](https://i.gyazo.com/793f

元記事を表示

Deviseの認証をCognitoに委譲し、カスタムログイン画面でログイン機能を実装する

## はじめに
今回はdeviseの認証をcognitoに委譲し、アプリケーション側で独自のログイン画面を作成して、ユーザーがログインできるように実装していきたいと思います。
## 対象読者
– deviseを使用したことがある人
– deviseの認証をcognitoに委譲したい人
– deviseの認証をcognitoに委譲したが、cognitoの[ホストされたUI](https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-user-pools-hosted-ui-user-experience.html)では物足りない人
## 動作環境
今回はdeviseログイン画面ありのアプリケーションのひな形を作ってくれている方がいたので、そちらのプロジェクトを使用したいと思います。

https://github.com/timothyjamesmarias/rails_7_devise_example

## 実践
流れとしては下記に沿って進めていきます。
Cognitoを既に構築されている方は、

元記事を表示

GooglePlacesAPIで取得したデータをデータベースへ保存する

# 初めに
初めまして。チータ(@cheetag_02)と申します。
個人開発をするにあたって、GooglePlacesAPIから取得したデータをデータベースに保存することがあったので、同じような状況の方のために、記録として残します。

# テーブルの作成
まず、取得したデータを保存するテーブルを作成します。
GooglePlacesAPIから取得できるデータは、一部ですが記事にまとめたのでこちらをご覧ください。
[Google Places APIを使用して情報を取得(Rails)](https://qiita.com/cheetah_02/items/d7c62be909ac4edca5d2)

テーブルの作成(マイグレーションファイル)
“` ruby:2023083120000_create_shops.rb
class CreateShops < ActiveRecord::Migration[7.0] def change create_table :shops do |t| t.string :name, null: false #店名

元記事を表示

Rails – Rspec で paralells spec を利用して並列処理する ( create / migrate / prepare / setup / drop の違い )

# 公式

https://github.com/grosser/parallel_tests

# Gemfile

gem を追加して bundle install する

“`
gem ‘parallel_tests’
“`

# database.yml

公式READMEの通り DB設定で環境変数を利用するようにする
この環境変数はテスト実行時などに自動的に paralells spec が付与してくれる

“`yml
test:
database: yourproject_test<%= ENV['TEST_ENV_NUMBER'] %>
“`

# テスト実行

“`
rails parallel:setup
rails parallel:spec
“`

うまく行かない場合は以下でも良いかもしれない
`parallel:setup` / `parallel:prepare` コマンドは使わなくてもテスト実行できる

“`
rails parallel:create
rails parallel:migrate
rails parallel:spec
`

元記事を表示

「ChatGPT(有料) vs Bing Chat(無料)」今話題のAIを検証してみた!

# 概要
皆さんは“ChatGPT“についてはご存知だと思いますが、最近話題のAIベースの検索エンジン“「Bing Chat」“についてご存知でしょうか??
どちらもすごく高性能なAIで、“ChatGPT“は“チャット bot“、“Bing Chat“は“検索エンジン“と名称や性能が若干違います。
今回は“ChatGPT“と“Bing Chat“のメリット、デメリット、得意、不得意を検証してみました!

:::note warn
私は初学者のため、間違った情報があればコメントなどで教えていただけると幸いです。
GPT-3.5に関しては~~個人的に嫌い~~なので検証しません。
:::

## Bing Chatとは?
BingはMicrosoftが作った検索エンジンです。
BingAIはChatGPT同様、対話型AIとして、雑談や質問に答えたり、創作物の執筆やプログラミングを手伝ったりなどができます。

また、画像生成AIとして、ユーザーのリクエストに応じて画像を作成したり、既存の画像を加工したりなども可能です。

## 検証1
どちらも画像を送る機能が

元記事を表示

[Rails]あなたのコードを半分にできるかもしれない?? 知って得するnil制御 ~presence編~

## 伝えたいこと
:::note info
ボッチ演算子はすごい
presenceはすごい
:::

## ~第1章~ はじまりのコード

**子供** 「ねぇねぇ父ちゃん!僕の書いたコードを見てよ!」
**父親** 「おぉ、どれどれ。見せてみろ。」

“`rb
name = nil
if @account.present? && @account.name.present?
name = @account.name
else
name = ‘未設定’
end
“`

**父親** 「アカウントがあったら名前を取得し、名前がなかったら[未設定]の文字を取得したいんやな」
**子供** 「さすが父ちゃん!見ただけで一瞬でわかっちゃうだ!」
**父親** 「まぁな。`present?`を活用しているのはグッドだ?nilや空文字など柔軟に判定してくれるからな」
**子供** 「でしょ!(実はネットに載ってたのコピペしただけだけど…)」
**父親** 「ただ、もう少し簡単にかけるな。**ぼっち演算子**って知ってるか?」
**子供** 「ぼっち演算子..?」
**父親** 「

元記事を表示

Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)):の解消方法

docker環境において、`localhost:xxxx/sidekiq`へアクセス出来なかった時の対処法

“`zsh:error
Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)):
“`

## docker-compose.ymlへ追記
envを追記

“`ruby:docker-compose.yml
sidekiq:
build: .
environment: # ここから下
RAILS_ENV: development
REDIS_URL: redis://redis:6379
“`

## 起動時の設定を追加する
以下を作成

“`ruby:config/initializers/sidekiq.rb
redis_config = { url: ‘redis://redis:6379/0’ }

Sidekiq.configure_server do |config|
confi

元記事を表示

【個人開発】Ruby on Rails 初学者をサポートするActiveRecord学習サービスを作ってみました 【Next.js + Rails API + Docker】

# はじめに
はじめまして! (https://twitter.com/saku0suke)

プログラミングスクールRUNTEQで転職を目指し、学習を始めて4ヶ月が経ちました。

最近、個人開発で`Ruby on Rails`のO/Rマッパーである`ActiveRecord`の学習サービスを作ってみました。

今回はこのサービスについて少しまとめてみます。
![見出しを追加 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517817/601d5f4c-daa6-80fa-1963-97330079d35f.png)

# 目次

| 章 | タイトル | 備考  |
|—:|————-|————|
| 1 |[サービス概要](#サービス概要)| このサービスについて |
| 2 |[サービスを作成した背景](#サービスを作成した背景) |開発に至った理由について|
| 3 |[使い方](#使い方) ||

元記事を表示

【Ruby on rails】グループ作成 その3 グループの編集と削除

# はじめに
プログラミングを勉強して2か月ほどです。
初心者なので間違っているところがあれば、ご指摘いただけると幸いです。
※@ki_87(kei i)さんの記事を参考に作成しました。
 とても分かりやすく参考になりました。
 ありがとうございます。

# グループの編集と削除
今回は作成したグループの編集と削除を実装していきます。
グループの作成については下記の記事で行っています。

https://qiita.com/kenty1116/items/2807833bc375ead197af

グループへの参加と退出は下記の記事で行っています。

https://qiita.com/kenty1116/items/f356eb9802aef9bbbb0c

それでは作成していきましょう!!!

# Let’s start!!!
## ルーティングの設定
“`routes.rb
Rails.application.routes.draw do
devise_for :users
root to: “groups#index”
resources :groups do

元記事を表示

Rails ✕ Reactで動画投稿機能を作ってみた

## 概要
おはこんばんにちわ。お疲れ様です。
備忘録ついでに初投稿。
RailsとReactを使って動画投稿機能を作った + “shrine”ってものに触れたので、そっと置いておこうと思います。
つたない部分もあるかと思いますがよろしくお願いします。(ご指摘待ってますね)

## 環境
– Rails 6
– React 17
– gem shrine 3.0
– aws-sdk-s3 1.113.0

## shrineとは
簡単にいうとファイルアップロードのための便利なツールキットです。
詳しくという方は、いろんな記事があるので読んでいただけたらと思います。

ここでは、雑に公式のリンクだけ貼っときますね。
[Shrine公式](https://shrinerb.com/)

# 始める前に
今回はUserの中のカラムに入れたいと思います。
動画はAmazon S3に置きます。
ローカルではminioを使います。
環境構築は各々でお願いします。

## テーブル作成
“`schema.rb
create_table “users”, force: :cascade

元記事を表示

【Ruby on rails】グループ作成 その2 グループ参加と退出

# はじめに
プログラミングを勉強して2か月ほどです。
初心者なので間違っているところがあれば、ご指摘いただけると幸いです。
※@ki_87(kei i)さんの記事を参考に作成しました。
 とても分かりやすく参考になりました。
 ありがとうございます。

# グループの参加と退出
今回は作成したグループへの参加と退出を実装していきます。
グループの作成については下記の記事で行っています。

https://qiita.com/kenty1116/items/2807833bc375ead197af

それでは作成していきましょう!!!

# Let’s start!!!
## ルーティングの設定
“`routes.rb
Rails.application.routes.draw do
devise_for :users
root to: “groups#index”
resources :groups do
get “join” => “groups#join”
delete “exit” => “groups#exit”
end
end
“`
##

元記事を表示

EinhornでSidekiqをマルチプロセス化する

この記事は
===

* Sidekiqはとてもよくできているワーカサーバなのですが、シングルプロセスでしか動作しません
* さらにRubyは1プロセス1CPUコアしか使えないので、結果“`Sidekiqは1コアしか使えない“`という弱点が発生します
* [einhorn](https://github.com/contribsys/einhorn)というなんでもかんでもマルチプロセス化してしまう神ライブラリを使うと、簡単にSidekiqの弱点を補えます

einhorn?
===

* 簡単にいうとUnicornやPumaみたいな、master/worker形式のマルチプロセス化をしてくれるライブラリです
* 今回はSidekiqに使いますが、Rubyに限らず、どんなプログラムでも対応可能です
* サンプルだと“`sleep“`コマンドをマルチプロセス化していて動きが面白いです

インストール
===

* Rubyでできています

“`ruby:Gemfile
gem ‘einhorn’
“`

起動
===

* “`einhorn“`コマンドを頭につけるだけなの

元記事を表示

【Advent Calendar Challenge 8日目】「status: :see_other」を忘れて数日溶かした話

こんにちは、プログラミング初学者のみんみんです。
私は現在「RUNTEQ」というプログラミングスクールでRailsを学習しています。
今回お話しするのはとあるコードをつけ忘れ、数日もの時間を無駄にした経験談についてです。

## そのコードの名は…
ある日のこと、私はいつも通りRUNTEQの課題を進めていました。
進捗はあまり良いとはいえず、
“`
わけの分からないエラーが出る

ググりまくって何とか直す

安心

またわけの分からないエラーが出る
“`
を繰り返していました。
でも、ひとまず調べれば何とかできるエラーだったためまだマシな状況だったのです。

そんなとき、掲示板の削除機能をようやく実装し終えてみると、画面にエラーが。

どうやら削除機能のルーティングが無いようです。

**私「あれ?ルーティングがおかしいのかな?設定したはずなんだけど…」**

この手のエラーは何度か見たことがあったので「どうせルーティング設定し忘れたんだろう」と思っていました。

それから数日後。

いくらルーティングを直してもエラーが解決することはなく、とうとうChatGPTも **「以下

元記事を表示

【Rails】ActiveModel::Errorオブジェクトについて

# ActiveModel::Errorsについて

`ActiveModel::Errors`は、Ruby on Railsの`ActiveModel`モジュール内のクラスで、モデルオブジェクト上のエラーメッセージを保持および管理するためのもの。主にActiveRecordモデルのバリデーションエラーを取り扱う際に使用されるが、ActiveRecordに依存しないモデルでも使用することができる。

## 主な特徴と使用方法

### 1. エラーの追加

`add`メソッドを使用して、特定の属性にエラーメッセージを追加できる。

“`ruby
errors.add(:name, “can’t be blank”)
“`

### 2. エラーの存在チェック
* any?メソッドでモデルにエラーが存在するかを確認できます。
* include?(attribute)で特定の属性にエラーが存在するかを確認できます。

### 3. エラーメッセージの取得

* full_messagesで全てのエラーメッセージの配列を取得できる。
* []メソッドで指定した属性のエラーメッセージの配

元記事を表示

OTHERカテゴリの最新記事