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

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

MySQL client is not connected がターミナルに表示されたら

`MySQL client is not connected`がターミナルに表示されたら速度系の問題!

私は単体テストコードをしていた時、異常系テストでうまくいったりいかなかったりの現象が起きていました。
例えば以下のコード
“`spec/models/xxx_spec.rb
item = FactoryBot.create(:item, user: user)
“`
このコードの中には画像が含まれている為処理に時間が掛かり、その処理の前に下のコードを読んでしまいエラーが出ていました。

これを解決するコード
“`config/environments/test.rb
config.active_job.queue_adapter = :inline #最終行endの上に追記
“`
この**active_job**は途中で重い処理があったら、それが終わってから次のコードを読んでね、という命令を出してくれる。

このせいで丸2日止まっていました。
やっと次に進める!!!!
ありがとうございます!!

元記事を表示

【Ruby】スコープについて

# はじめに
こんにちは、現在アメリカの大学で語学を学びながらソフトウェアエンジニアになるために独学で勉強しているものです。
今回は、Rubyのスコープについて整理した内容を共有します。
スコープは少し苦手意識があって避けていたのですが、しっかり向き合い、記事にまとめてみました。
もし内容に誤りがあればご指摘いただけると幸いです。

# スコープとは?
プログラム内の変数やメソッドには、それぞれアクセス可能な範囲が決まっています。
この範囲のことをスコープと呼び、変数の種類によって異なるスコープが適用されます。
この記事では、Rubyの代表的な変数のスコープについて、それぞれの用途やアクセス範囲を解説します。

## ローカル変数
ローカル変数は、メソッドやブロック内で定義され、その内部でのみ使用できます。
他の部分からアクセスや変更ができないため、安全に使えるのが特徴です。
“`ruby:local1.rb
def greet
message = “Hello, World!”
puts message
end

greet # => “Hello, World!”
pu

元記事を表示

Railsで`ckeditor`の`Sprockets::FileNotFound`エラーを解決する方法

## 問題の背景

Railsアプリケーションにおいて、`ckeditor`を利用する際に`Sprockets::FileNotFound`エラーが発生する場合があります。具体的には、次のようなエラーメッセージが表示されます。

Sprockets::FileNotFound at /admin/users/sign_in
couldn’t find file ‘ckeditor/init’ with type ‘application/javascript’
Checked in these paths: …

このエラーは、アセットパイプラインで`ckeditor/init`ファイルが見つからないために発生します。`ckeditor`のバージョンとSprocketsの互換性の問題が原因であることが多く、公式リポジトリでも議論されています([Issue #881](https://github.com/galetahub/ckeditor/issues/881))。

## 解決方法

この問題を解決するには、いくつかのアプローチがありますが、互換性のあ

元記事を表示

[Tips]pdf-readerでパスワード付きファイルからデータを抽出する

pdfの中身を抽出する方法は各言語様々な方法があると思いますが、rubyでやる方法の一つとして[pdf-reader](https://github.com/yob/pdf-reader)を利用する方法があります。
gemのインストール後、以下のようなコードで簡単にページのテキストやメタデータを見ることができます。

“`ruby
require ‘pdf-reader’

reader = PDF::Reader.new(“sample.pdf”)

puts reader.pdf_version
puts reader.info
puts reader.metadata
puts reader.page_count
reader.pages.each do |page|
puts page.text
puts page.fonts
end
“`

ただ今回扱うファイルがパスワード付きだったので、どうするのかReadmeを見たところ特に言及はありませんでした。
どうしたものかと思っていましたが、gemのテストを見たところ答えがありました。

https://github.

元記事を表示

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

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです
# 個人メモ
– Model
データモデルとして扱うデフォルトのデータ構造のこと
– Active Record
データベースとやり取りするRailsのライブラリ
Active Recordは、データオブジェクトの作成/保存/検索のためのメソッドをもつ
– マイグレーションコマンド
rails generate model モデル名 属性
マイグレーションファイルを変更すると後からデータベースの構造を変更することが可能
– マイグレーションの適用
rails db:migrate
– モデルに関するテスト
rails test:models
– 有効性(Validity)の検証
valid?メソッドでオブジェクトが有効かどうか確認できる
– 存在性の検証
validatesメソッドでpresence: trueを追加することで存在性を検証した
– フォーマットの検証
formatオプションを用いて、有効なメールアドレスにのみマッチする正規表現を組み立てることで検証した
– 一意性の検証

元記事を表示

【2023年版】Rubyリポジトリのコミット動向、主要言語との比較

2023年のRubyリポジトリのコミット数を Author ごとの時系列グラフにしてみました。

## Rubyリポジトリのコミット動向

2023年のRubyリポジトリの総コミット数は6767回でした。この数は、主要なプログラミング言語の中だと Java より大きくて Kotlin より小さいです。

Author の合計人数は307名です。上位5名で合計3254コミット、全体の48%を占めています。

![ruby-commits-2023.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33011/f52550af-72db-5cc2-dfbf-54e35c5eb273.gif)

– 集計したリポジトリは [ruby/ruby – GitHub](https://github.com/ruby/ruby) の master ブランチです
– グラフデータには `git log -n 10000000 –date short –pretty=format:”%ad%x09%h%x09%an”`

元記事を表示

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

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです
# 個人メモ
– モックアップ(ワイヤーフレーム)
ユーザーインターフェイスの概要を示したもの
– Bootstrap
– Bootstrapは bootstrap-sass gemを使ってRailsアプリケーションに導入できる
– Bootstrapにてnavberやnav、navbar-nav、navbar-rightクラスには特別な意味がある
– パーシャル(partial)
Webサイトのレイアウトにページごとの内容を挿入する
ex) <%= render 'layouts/header' %>
– renderと呼ばれるRailsヘルパーを用いてヘッダーの情報を置き換えている
– _header.html.erbというファイルを探してその内容を評価し、結果をviewに挿入している
– アセットパイプライン
SassとAsset Pipelineは、開発効率のために切り分けられたCSSの冗長な部分を圧縮し、本番環境に最適化した結果を出力する
– 名前付きルーティング

元記事を表示

【Ruby】インスタンスメソッドとクラスメソッドの使いわけ

# はじめに
こんにちは、絶賛Ruby勉強中のものです。
本日はRubyのインスタンスメソッドとクラスメソッドの使い分けについて説明していきたいと思います
Rubyの経験がまだ浅い私は、クラスメソッドの使い時をあまり理解しておらずインスタンスメソッドで代用できるのでは?と考えておりました。
そこで本日はインスタンスメソッドとクラスメソッドの使い分けについて記事を書いていこうと思います。
なお、インスタンスメソッドとクラスメソッドの説明については、記事を書いたので詳しく見たい方は確認していただければ幸いです。

https://qiita.com/Taira0222/items/aca062a0cfb879fded31

# インスタンスメソッド
まずは、フルネームと年齢を取得する`User`クラスと`user1`,`user2`インスタンスについてみていきましょう。
“`ruby:instance.rb
class User
attr_accessor :first_name, :last_name, :age

def initialize(first_name, la

元記事を表示

Railsでの joins と includes の違いと使い分け

## 目次
– [joinsとは?](#1-joinsとは)
– [includesとは](#2-includesとは)
– [joinsとincludesの使い分け](#3-joinsとincludesの使い分け)
– [N+1問題とは?](#4-n1問題とは)
– [ベストプラクティス](#5-ベストプラクティス)
– [組み合わせて使用する例](#6-組み合わせて使用する例)

## はじめに

Railsのアプリケーション開発では、モデル間の関連性を活用してデータを取得することが多く、その際に利用するのが `joins` と `includes` です。この記事では、データベースから必要な情報を取得する際に使用する`joins`と`includes`について、具体的な使い分けとその効果を解説します。

## 1. `joins`とは?

`joins`は、内部結合 (INNER JOIN) を使用して、関連するテーブルからデータを取得するためのメソッドです。RailsのActiveRecordで`joins`を使用すると、関連付けされた複数のテーブルを結合してクエリを発行できま

元記事を表示

Form_withとは!

form_withメソッドは、Railsで使うフォームの作成方法。これを使うとデータを入力する画面(フォーム)を簡単に作成できます。

たとえば、「商品を購入する」や「新しいユーザーを登録する」などの機能がある場合、それぞれのデータを入力するフォームが必要です。form_withメソッドは、このようなフォームを作成するのに便利です。

基本の使い方
“`ruby
<%= form_with model: @user do |form| %>
<%= form.text_field :nickname %>
<%= form.submit "登録" %>
<% end %>
“`
model: @user の部分で、どのデータ(この場合はユーザー)を扱うフォームか指定します。
form.text_field :nickname は「ニックネーム」を入力するための箱を作ります。
form.submit “登録” は送信ボタンを作ります。
このように、form_withを使うと、HTMLを直接書かなくてもRailsが自動で適切なフォームを生成してくれます。

form_withで

元記事を表示

ActiveRecord::PendingMigrationError【Ruby on Rails】

ruby on railsでアプリケーション作成中に出遭ったエラーについての解決方法です。

今回、ターミナルからrails g migration Addカラム名Toテーブル名でカラムを追加したところ、テーブル名を間違えてしまったようでエラーになりました。

## エラーメッセージ
“`
Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=development
You have 1 pending migration:
20241025004905_add_user_id_to_tweers.rb
“`
マイグレーションは保留中、bin/rails db:migrate RAILS_ENV=developmentを実行してとのことなのでターミナルに入力。

続いて下記エラーが発生。
“`
StandardError: An error has occurred, all later migrations canceled: (StandardError)

~中略

元記事を表示

【Rails】RAILS_DEFAULT_LOGGERを使用できない

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

## 問題
コード
“`ruby
RAILS_DEFAULT_LOGGER.info “xxx”
“`

エラー文
“`ruby
uninitialized constant RAILS_DEFAULT_LOGGER
“`

## 解決方法
以下のように修正します。
“`ruby
Rails.logger.info “xxx”
“`

## 参考
https://stackoverflow.com/questions/11585296/uninitialized-constant-rails-default-logger

元記事を表示

オリジナルアプリ 〜wants〜 作成過程(リクエスト機能編)

### 本日の進捗報告: Wantsアプリのリクエスト機能実装(リクエスト投稿まで)

1. リクエストコントローラー・ビューの作成
1. リクエストモデルの作成
1. リクエストテーブルの設計とマイグレーション
1. ビュー新規依頼ページへのリンク作成
1. 画像保存用にactive storageの設定
1. カテゴリーなどの選択画面用にactivehashを設定
1. 投稿後トップページに戻る設定
1. バリデーションとエラーメッセージの表示の修正

色々つまづいた所もあって大変だったけどうまく動作できた時は感動した。まだまだ道程は長いけど12月までに完成させます!!
## 試作段階のビュー
![スクリーンショット 2024-10-29 18.30.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763893/59049062-6a01-0cfb-0f9b-858fb06e710f.png)
![スクリーンショット 2024-10-29 18.30.44.png](https://qiit

元記事を表示

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

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです
# 個人メモ
– カスタムヘルパー
自作のメソッドをカスタムヘルパーと呼ぶ
Railsでは自動的にヘルパーモジュールを読み込む
したがって自動的に全てのビューで利用できるようになっている
– コンストラクタ
クラスからインスタンスを生成する処理のこと
ex) s = String.new(“a”)
– リテラル
“”で囲んだものを文字列リテラル、123などを数値リテラルと呼ぶ
– 2つのメソッド
クラスが直接呼び出すメソッドをクラスメソッド、インスタンスが呼び出すメソッドをインスタンスメソッドと呼ぶ
– ユーザークラスの作成について
ユーザー名とメアドについてのアクセサー
attr_accessor :name, :email
アクセサーを作成すると、そのデータを取り出すメソッド(getter)と、データに代入するメソッド(setter)をそれぞれ定義してくれる
– シンボル
シンボルはRailsではラベルとして用いられる
追加的な構造を持たない(代入などができない)文字列みたいなもの

元記事を表示

MiniMagick gemのバージョンを変更したら動かなくなった。そのため5.0.1から4.5.1へ修正する。

## はじめに
Railsのバージョンアップ中にて
プロジェクトで画像処理のためにMiniMagickを使用していて、特定のバージョンでエラーが発生しました。ここではエラー内容と、その解決のためにMiniMagickのバージョンを変更した方法について共有します。

## 発生したエラー
まず、コード内で以下のようなエラーが発生しました:

mogrify: unrecognized option `-run-command’ @ error/mogrify.c/MogrifyImageCommand/5941.

このエラーは、MiniMagickが`mogrify`コマンドで`-run-command`オプションを使用しようとしたときに発生しました。`-run-command`はサポートされていないオプションであるため、エラーが発生したと考えられます。

## 環境
– Ruby: 3.2.3
– MiniMagick: 5.0.1

## エラーの原因と対応
エラーメッセージから、バージョン互換性に問題がある可能性を疑いました。調査の結果、MiniMagickのバージョンを

元記事を表示

【Ruby】繰り返し文のまとめ

# はじめに
こんにちは、絶賛Ruby勉強中のものです。
本日はRubyで出てくる繰り返し文についえ簡単にまとめようと思い記事にしました。
繰り返すという点では同じですが、それぞれ違う用途で使われることが多くわからなくなってしまうことがあると思うので初心者向けではありますが見ていきたいと思います

# Rubyの繰り返し文
まずはRubyの繰り返し文はどんなものがあるのでしょうか
* times
* for
* while
* until
* each
* loop
`loop`は無限ループを作りたい時などに使用しますが、使用頻度がそこまで多くないようなのでその他の文について説明していきます。

## times
`times`は「○回繰り返す」と決まっている場合に便利な構文です。
例えば、5.timesとすると5回だけ処理を繰り返します。
“`ruby:times1.rb
5.times do |i|
puts i
end
# 0
# 1
# 2
# 3
# 4
“`
また、do … endの代わりに中括弧 { … }を使って以下のように短く記述することも可能です。

元記事を表示

Ruby method備忘録

よく忘れちゃうのでメモ。

# 配列関係
## インスタンス化
“`Ruby
list = [1, 2, 3] # 正統派プリミティブ表現
list = %w(吾輩は猫である 名前は萬田太郎) # 文字列。%W()だと”#{変数}”みたいなのも展開してくれる
list = Array.new(5) # 五枠の配列になる。中身はnil。
# 初期値を渡すときは第二引数に指定できるが、全要素が同じオブジェクトを参照するようになる。
# 細かく指定したいならブロックを渡そう。
“`

## 取得・検索
“`Ruby
list[0] # 0番目
list[2, 3] # 2個目から3つ取り出す
list[2..3] # 2個目から3つ目まで
list[..3] # 最初から3つ目まで。負の数を指定したら最後から数えて、になる。
list.first # 0番目を取得。引数を渡すと最初からn個
list.last # 最後を取得。引数で最後からn個。
list.vatues_at(1, 3, 5) # 1つ目、3つ目、5つ目。
list.fetch(2, “ねえよ”) # 2つ目、なかった

元記事を表示

Formオブジェクトについて 【備忘録】

この議題は沢山の人が書いていますが、理解の為に自分の言葉で説明したいと思います。

1つのフォームから複数テーブルにデータを送信したいとき、この`Formオブジェクト`を使う。
(ほとんどが1つのフォームから2つのテーブルのケース)

一緒にする他モデルがあるモデルファイルにformオブジェクトファイルを作る。
名前は1つにしたいそれぞれのモデル名をつなげたもの。例)memo_form.rb、address_order.rb
この中にバリデーションやsave機能を記述することでまとめて複数のテーブルに送信する事が出来る。

最初聞いた時、多対多の中間モデルみたいなものかな?と思いました。
(あれは複数のidを1つのレコードで管理するテーブルでしたね。)

元記事を表示

メッセージ機能の実装

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

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

## 実装時のER図
![スクリーンショット 2024-10-26 18.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/1445a2ae-a6b1-349f-f3dd-da9bc90e8845.png)
UserモデルとRoomモデルの間に二つの中間テーブルを作りました。
Roomモデルはチャットルーム(メッセージをやり取りする場所)となります。
※チャットルームについて以降はルームと表現します。

Entrieモデルの役割:どのユーザー(user_id)がどのルーム(room_id)に居るのかを保存する

Messageモデルの役割:どのユーザー(user_id)がどのルーム(room_

元記事を表示

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

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです
# 個人メモ
– コントローラの生成コマンド
rails g controller コントローラ名 アクション名
– マイグレーションの変更を元に戻す
rails db:rollback
– テスト駆動開発(TDD:
最初に「正しいコードがないと失敗するテスト」を書き、次に本編のコードを書いてそのテストがパスするようにする
– assertion(アサーション)
アクションをgetして正常に動作することを確認するテスト手法
– テストの実行
rails test
– provideメソッド
引数にてページのタイトルをviewごとに変更
– yeildメソッド
記述箇所に実際にタイトルが挿入される

元記事を表示

OTHERカテゴリの最新記事