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

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

transactionの処理の流れについて調べてみた!

# Transactionとは
ChatGPT
>トランザクション(Transaction)は、データベースにおける一連の操作をまとめて、それらがすべて成功することを保証するための仕組みです。トランザクションは、データベースの整合性を保つために非常に重要な役割を果たします。

# railsにおけるTransactionについて調べてみた!

Railsでトランザクションを使用する場合は、トランザクションの範囲を
ActiveRecord::Base.transactionブロックで囲む必要がある。

“`ruby
ActiveRecord::Base.transaction do
# ここに処理を書く
end
“`

transactionブロック内で例外が発生した場合、ブロック内で行われたデータベース更新処理が全てロールバックされる。

# 注意点

transaction内でrescue句を書くとロールバックされない。
理由は、Railsに実装されているtransactionメソッドで、transactionブロックに対して例外が発生した場合に、rescueしてロールバ

元記事を表示

【Rails7】seedファイルへ画像を追加(ActiveStorage使用)

タイトル通り、ActiveStorageを使用してseedファイルへ画像の追加を行っていきます。

記事を書いている私の状況としては

ECサイトをbootstrapのテンプレートを使用して開発中。

データベースへ反映(追加)したデータをrailsのviewで確認が取れるまで行えました。

# 環境

Dockerで作成したコンテナの内部でRailsを動かしていきます。

基本的にコンテナ内部でrails cを使用してデータの中身を確認しつつ進めていきます。

# 細分化して考える

ペアプロしていただいたHCメンバーの方から「何事も細かく切り分けて行う」癖をついてた方がいいとアドバイスをいただきました。

特に初めて触るorあまりよくわかっていないもので「〇〇をする」というのはハードルが高い。

高いハードルはまずは細かく切り分けてアプローチのかけ方を変えた方が実践的かつ良質な経験値と時間を得られることを教えていただきました。

## 画像の表示に係るプロセス

今回は「画像を表示させる」のがゴールです。

そこで、漠然としてしまっている途中のプロセスを明確にして作業を進めます。

元記事を表示

【Ruby on Rails】rails-erdでテーブル構造をER図で見れるようにしたい

# はじめに
どうしてもテーブルが多くなってくると`schema.rb`だと見づらくなり、テーブルの関連性を理解するのに時間がかかってしまいます。
そこで`rails-erd`という`gem`を使うと**ER図**を出力できるそうなので、試してみました!
# 実装環境
– Ruby 3.2.2
– Ruby on Rails 7.0.7
– Homebrew

# 導入手順

“`terminal
brew install svn
“`

“`terminal
brew install graphviz
“`
::: note warn
“`
brew install graphviz
“`
実行時に下記のエラーが出たので、`svn`も同時に読み込んでいます。
“`ruby
You must: brew install svn
Error: graphviz: Failed to download resource “netpbm”
Failure while executing; `/usr/bin/env svn checkout https://svn.cod

元記事を表示

M1 Macでpsychがインストールできない問題と解消法

## 私のOS状況
– M1Macを使用
– CPUアーキテクチャはarm64
“`zsh
$ uname -m
arm64
“`
## エラー状況
RailsをAPIモードで作成しようと以下のコマンドを実行
“`zsh
rails new uber-eats-like –api
“`
すると
“`zsh
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

checking for yaml.h… yes
checking for yaml_get_version() in -lyaml… no
libyaml not found
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
ne

元記事を表示

erbファイルでTailwind CSS IntelliSenseのコード補完機能を使えるようにする

初めまして。RUNTEQというスクールで学習をしている、たかぎと申します。

Tailwind CSS IntelliSenseというvscodeの拡張機能をインストールすることで、htmlファイルではTailwindCSSのクラスの自動補完をすぐに使えたのですが、erbファイルだと設定をしないと使えないようです。
これについての記事があまりなかったので、説明しようと思います(私も教えていただいたものですが)。

設定は簡単です。
以下のコードをsetting.jsonに追加するだけです。

“`setting.json
“tailwindCSS.includeLanguages”: {
“erb”: “html”
}
“`

公式に載っていたのですが、私はqiitaの記事ばかり探してしまいました。なっさけない。
https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss

以上です。あざした。

元記事を表示

Railsのローカル環境にHTTPSとカスタムドメインを導入!10分でOK!

## はじめに
ローカル認証局(CA)の機能を提供する**mkcert**を使用して、MacOSのローカル環境でHTTPSとカスタムドメインを導入してみましょう!

## mkcertの設置
**brew**を利用してパソコンに**mkcert**を設置します。
“`shell
brew install mkcert
“`

## 認証局(CA)の設置
**mkcert**のコマンドを利用してMacOSにローカル認証局(CA)のルート証明書を設置します。
“`shell
mkcert -install
“`

## SSL証明書
**`config/ssl`** ディレクトリにSSL証明書とプライベートキーを生成します。
“`shell
# Railsプロジェクトのルートディレクトリで実行
mkdir -p config/ssl && cd $_ && mkcert “*.custom_domain.localhost”
“`

## Rails環境構成の変更
**`config/environments/development.rb`** ファイルにカスタムドメインを追加

元記事を表示

【WIP】Rails7.1での変更点

こんにちは。プログラミングスクール[Happiness Chain](https://happiness-chain.com/)でメンターをしているryoです。
今回は、最近リリースされたRails7.1の変更点に関して、記載していきます。

※以下公式リリースノートの和訳と、個人的な感想を少し記載しています。

https://rubyonrails.org/2023/10/5/Rails-7-1-0-has-been-released

※ こちら執筆途中になりますので、ご了承ください。

## Railsアプリ新規作成時に、Dockerfileの自動生成

`rails new sample-project`をすると以下のDockerfileが自動生成される。

“`Dockerfile
# syntax = docker/dockerfile:1

# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.2.2
FROM registr

元記事を表示

オブジェクト指向とは(初心者向け)

転職活動中にオブジェクト指向について聞かれ、
うまく答えることができなかったので、理解を深めるための記録です!

オブジェクト指向とは
=
「属性(構成するデータ)」と「メソッド(指示に対する振る舞い)」を1つにまとめた「オブジェクト」の定義ごとに「クラス」を分類し、そのクラス同士を組み合わせてシステムを組み立てる考え方のこと。

、、、???
という感じだと思います笑(何を隠そう私がそうです)

この考え方を車に例えて説明をすると、

属性とは、モノ(オブジェクト)が持っているデータのことで、「色」、「メーカー」、「車種」など
メソッドとは、モノ(オブジェクト)が持っている処理のことで、「前進する」「止まる」「バックする」などのこと

次に「クラス」について説明していきます。

クラスとは
=

データと処理をひとつにまとめたもの。
オブジェクトのもつ性質ごとに分類したものとも言い換えることができます。
モノ(オブジェクト)の設計書のようなモノです。

今回の車で例えると、下記のようになります。
「」に入っているものは全てオブジェクトです。
ーーーーーーーーーーーーーーーーーーーーー

元記事を表示

《No Ransack::Search object was provided to search_form_for!》の対処方法

# はじめに
皆さん、お疲れ様です。
今回、”Ransack” Gem を用いた検索機能の実装を行なっている際にとあるエラーが発生し、数時間溶かしてしまったので、備忘録として技術記事を作成しました。
もし同じエラー内容が発生している方は、是非今回の記事内容を解決の糸口として活用していただければと思います…!

# 概要
今回、《Ruby on Rails》を用いた投稿掲示板アプリにて、検索機能を”Ransack” Gem を用いて実装していました。
検索機能の実装内容としては、 **『ヘッダー部分に投稿に関する検索フォームを実装、検索を行うと投稿一覧画面に検索フォームに入力したワードに関する投稿のみを表示する。』** と言うシンプルな検索機能です。

しかし、この検索機能を実装後に実際に検索を掛けて投稿を絞った後、各投稿の詳細画面にアクセスしようとしたところ…
**《ArgumentError in Posts#index No Ransack::Search object was provided to search_form_for!》**
と言うエラーが発生してしまいまし

元記事を表示

初学者向け)form_withの使い方とオプション(model,local:true)について

# **はじめに**
私自身が`form_with`が何であるか、local:trueとは何なのか理解せずに躓いてしまったので、初学者の方々に`form_with`についての理解の一助になればと思い投稿しました。
(記事の内容について不備等あれば、ご意見等いただけると幸いです)

# 目次
| 章 | タイトル | 備考  |
|—:|————-|————|
| 1 |[form_withの紹介](#form_withの紹介)| どんなことができるのか、`form_tag`や`form_for`との違い |
| 2 |[form_withの構文](#form_withの紹介)| 使い方と引数、オプションについて |
| 3 |[最後に](#最後に) | |
| 4 |[参考文献](#参考文献) | 今回参考にした文献 |

# form_withの紹介
**(1)どんなことができるのか**
ヘルパーメソッドの一つで、入力フォー

元記事を表示

エラー:SyntaxError circular argument referenceの解決方法

## 【開発環境】
Ruby 2.7.5
Rails 6.1.7.6

### どういう時にエラーが発生したか
秀和システムの「Ruby on Rails 6 超入門」で学んでいます。
進めていく中、「2-6 メッセージボードを作ろう」で「circular argument reference」というエラーが発生。

![スクリーンショット 2023-10-08 19.23.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568360/14982102-8a26-9d83-4214-849a9ee3a8ea.png)

### エラーの原因
以下のサイトによると、ruby2.2.0以降から、メソッドの引数のデフォルト値に同じ名前の変数を使おうとするとcircular argument referenceというエラーが発生するようです。
https://qiita.com/a_ishidaaa/items/47a8459aa5fe5512871a

### エラーの解決方法
こちらは、キーワード引数

元記事を表示

ActiveHashにてcurrent_scopeを含むエラーが出た場合に考えること

# はじめに
@rinrin_abc1818 と申します。
今回は自分用に記録として残したいと思い投稿させていただきました。

:::note warn
筆者はプログラミング経験半年です。
至らない点があるかと思いますので、その際はご指摘いただけると幸いです。
:::

# 概要
現在Ruby on Railsを用いて投稿型のアプリケーション作成中です。
Deviseを使用してのユーザー管理機能実装時にActiveHashを加えて実装しようと考えていました。

そこで今回出現したエラーがこちらです。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333436323331322f34306130373631652d333130652d633731362d363964342d3938343036646562323137342e706e67.png](https://qiita-image-sto

元記事を表示

【Rails】実務でのsaveとcreate、create(save)とcreate!(save!)の使い分け

こんにちは。プログラミングスクール[Happiness Chain](https://happiness-chain.com/)でメンターをしているryoです。

今回はスクールでsaveとcreate、create(save)とcreate!(save!)をどのように使い分けるのか、質問があったので、実際に実務でどのように使い分けているかお話しします。

## saveとcreateの違いと、エラーハンドリングの方法

saveとcraeteの違いは、以下になります。
– save
– newで作成したインスタンスを、DBに保存する
– 返り値として、`true`(DB保存成功)or`false`(DB保存失敗)を返す
– create
– インスタンス生成 + DB保存を一括で行う
– 返り値として、DB保存成功・失敗に関わらず、インスタンスを返す(違いとして、IDの有無)

– 共通点
– インスタンスのerrorsに、ActiveModel::Errorインスタンスが配列に格納される

上記を考慮すると、エラーハンドリングは以下になります

元記事を表示

【Ruby on Rails】bundle installをもう少し速くしたい時の設定

# はじめに
`bundle install`実行時に`gem`が膨大になってくると、その分実行時間が長くなるのが地味にストレスでした。調べたところ、速くする方法があったのでまとめます。

# 前提条件
– `bundler`がバージョン**1.5**以上である事
“`ruby
bundler -v
Bundler version 2.4.17
“`
# コマンド
“`ruby
bundle install –jobs=4

#or

bundle install -j4
“`
このコマンドで**並列処理**で実行してくれるようになり、処理が速くなるケースが多くなります。

https://qiita.com/4_mio_11/items/7f418ca661d9f5a2a39d

`time`コマンドをつけると、実際の計測時間を測ることができます。

“`ruby
time bundle install -j4
Bundle complete! 16 Gemfile dependencies, 75 gems now installed.
Use `bundle info

元記事を表示

FaradayでHTTPリクエストのリトライ処理を実装する

# はじめに
Railsのプロジェクトに限ったことではないですが外部のAPIを呼び出すはよくあることだと思います.
RubyにはいくつかHTTPクライアントのGemがありRailsのプロジェクトで利用できますが今回は`Faraday`というGemを用います。
APIが構えてあるサーバやAPIまでのネットワークなど一時的な高負荷などが原因でAPIへのリクエストが失敗したときに同じ内容のリクエストをかけたいケースがあります.
`Faraday`を用いることでリトライの処理が簡単に記述できるので紹介していきます。

https://github.com/lostisland/faraday

# インストール
“` ruby:Gemfile
gem ‘faraday’
“`
or

“`bash:console
gem install faraday
“`

# faraday-retry
`Faraday`でリトライを実装する場合`faraday`のとは別に`faraday-retry`が必要です.

“` ruby:Gemfile
gem ‘faraday-retry’
“`

元記事を表示

SQLインジェクションのエスケープ処理をRailsがどんな感じで実装しているか見に行った記録

## はじめに
こちらの記事ではSQLインジェクションが何かについては解説していませんので、詳しく知りたい方はRailsガイドをご覧下さい。

http://railman.net/railsguides/6.1/security.html#sql%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

## 記事を書いた動機と概要
Railsガイドを読んでいて、SQLインジェクションについて読んでいると`Ruby on Railsには、特殊なSQL文字をフィルタが組み込まれており、「’」「”」「NULL」「改行」をエスケープします。` と書かれていたので、それってどこで、どうやって実装しているんだろう?と疑問に思って調べてみたので、その過程をつらつらと書いています。
はい、ほぼ独り言です。
下記は疑問に思った部分をRailsガイドから引用しています。

>7.2.4 対応策
Ruby on Railsには、特殊なSQL文字をフィルタが組み込まれており、「’」「”」「NULL」「改行」をエスケープ

元記事を表示

例外処理について調べてみた!

例外処理について、ChatGPTと一緒に勉強してみました!

## ChatGPT
例外処理は、プログラムが実行中に予期せぬ状況が発生した際に、それに対処するための仕組みです。これはプログラムの正常な流れを中断し、エラーや異常状態に対する適切な対応を可能にします。

# 例外処理の基本: プログラムの異常状態への対応方法 ?

プログラムを書く際には、エラーや異常な状態が発生することがあります。そんなときに役立つのが「例外処理」です。

## 1. 例外処理って何?

例外処理は、プログラムが実行中にエラーや異常な状態が発生した際に、それに適切に対応する仕組みです。
例外処理を使用することで、プログラムが終了せずにエラーをハンドリングすることが可能になります。

## 2. 例外ってどんなもの?

プログラムでの例外は、エラーや異常な状態を表す。
例外を投げることで、プログラムがその状況にどう対処するかを示すことができる。
Rubyでは raise を使って例外を投げることができる。そして、rescue ブロックを使ってその例外をキャッチし、適切な処理を行っていく。

## 3. 例外

元記事を表示

Railsの基礎について

# Railsの基礎

## **Ruby on Railsの特徴**

– MVCにより構成

MVC(Model-View-Controller)とは、プログラムをModel、View、Controllerの3要素に分割し、ソフトウェア内部データをユーザから分離することで、ソフトウェアの保守性を向上させる考え方です。

!https://udemy.benesse.co.jp/wp-content/uploads/08d09bb2261e51937df93f9044415eb9.png

Controllerからのメッセージを受け取り、アプリケーションが扱うデータとその手続きに関しての処理を行います。データが変更された場合、Viewに表示の変更を指示します。Ruby on Railsでは、Active RecordによりModelを扱います。(DBとの受け渡しの役割)

**Rails modelを使うと、直感的で記述しやすいコードでデータベースを扱うことができる。**

データベースはテーブルの集合でできています。テーブルとは、エクセルの表のように情報を縦横に並べ

元記事を表示

RailsAPIテストについての備忘録

# APIテストについて
 RailsのAPIテストについて理解がなかなかできていない部分があるので、調べたものを備忘録としてまとめていく。

## Rspecとは
– そもそもRspecとは、RubyプログラマのためのBehaviour-Driven Developmentツール
– テスト駆動開発、ドメイン駆動設計、受入テスト駆動設計を組み合わせたソフトウェア開発のアプローチ

**何が言いたいのかというと。。**
RSpecを使うことでRailsでテストを実行することができるということ

## テストを書く理由
– テストコードはアプリケーションの命綱、安全ネット、防弾チョッキ
画面に不具合が発生し、期待通りの挙動にならなくなるのを防ぐ役割

– 将来の自分が楽をするために書く(開発効率をあげる)
コマンド一つで今まで書いてきたコードの動作確認ができる(1つ1つ手作業で確認しなくて良い)
**リファクタリングをするには必須になる!**

– 将来共同で作業をするかもしれないメンバーに向けて書く
コードを書いた人の意図や期待している動きなどをテストコードで伝えるこ

元記事を表示

Discord likeなチャットアプリを作成した話

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

## 1. はじめに
discordのようにグループトークができるチャットアプリを開発したのでその記録を記します。
制作したのは1年近く前になりますが、過去の開発記録を残すために記事を作成しました。

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

### 2-1 アプリの概要
このチャットアプリは部活動やサークルで使われることを想定して制作しました。部活ごとに「グループ」を作成し、グループごとに複数のトークルームを作ることができます。

![アプリ画面](https://i.gyazo.com/f52ca83a56757a43dabe11d5e46c0e42.png)

元記事を表示

OTHERカテゴリの最新記事