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

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

RubySilverに合格できたお話

## はじめに
初めまして、@jinta_02と申します。
未経験からエンジニアに転職して、早3ヶ月が経ちましたが、業務をする上で、「これ何してんだ?、どんな書き方?」と思おうことが多々あったので、RubySilverを受験してきました。
これから受験される方の参考になればと思ったので、受験記録を残します😀

## スキルレベル
– エンジニア歴3ヶ月(未経験からWebエンジニア)
– 転職前に、10ヶ月ほどプログラミングスクール受講(主に、Ruby, Railsを学習)
– 以下のポートフォリオを作成できるレベル
[個人開発】服好き・カフェ好きのためのショップ検索サービス「服カフェ」をリリースしました](https://qiita.com/jinta_02/items/329abd44056277a17d739)

## 受験のきっかけ
エンジニアに転職して実際にサービス開発に携わる中で、チームメンバーが書いているコードを理解できない部分があったので、もう少しRubyの文法だったりライブラリについて学ぶ必要があると感じたからです。また、学習するなら何か形に残るものにしたかったのと、R

元記事を表示

polymorphicと中間テーブルの違い

polymorphicと呼ばれる、初めましての概念と出会ったので記録します。
polymorphic自体は理解したつもりだったのですが、中間テーブルの違いはなんなのかなと思った時に分からなかったので聞いてみました。

以下本文

ポリモーフィック(polymorphic)と中間テーブル(join table)は、データベース設計において多対多の関係を扱うための異なるアプローチです。それぞれの違いと特徴を以下に説明します。

### ポリモーフィック(Polymorphic)

**定義:**

ポリモーフィック関連は、一つのモデルが複数の他のモデルに関連付けられる方法です。ポリモーフィック関連では、関連するテーブルに追加のカラムを使用して、関連付けのタイプを識別します。

**使用例:**

例えば、コメント(Comment)モデルが、記事(Article)や画像(Image)など、複数の異なるモデルに関連付けられる場合があります。この場合、ポリモーフィック関連を使用します。

“`ruby

# Migration to create comments table with pol

元記事を表示

Rails 7.2 をちょこっと試す (insert_all returning オプション編 (ただしMariaDBに限る))

## はじめに
Rails 7.2 では、MariaDB で、`insert_all` に `returning` オプションが使えるようになりました。
MySQL では使えないので注意が必要です。
(PostgreSQL では、以前から `returning` オプションが使えます。)
## 環境
– Ruby 3.3.2
– Rails 7.2.0.beta2
– MariaDB 11.4.2
– MySQL 8.4.0

## 準備
Bookモデルを作ります。
“`sh
$ bin/rails g model Book title
“`

## MySQL での挙動

MySQL では `returning` オプションを使うとエラーになります。
MySQL に接続するように `config/database.yml` を修正して以下を実行します。
“`sh
$ bin/rails db:create db:migrate
“`

Rails コンソールで `insert_all` を `:returning`実行するとエラーになります。
“`ruby
$ bin/r

元記事を表示

【Rails7】to_sでwrong number of arguments (given 1, expected 0) (ArgumentError)が発生する

## はじめに
Rails7にアップデート中、to_sを使用している部分でエラーが発生したので、解消方法をまとめていきます。

## 問題
エラー内容
“`ruby
date = DateTime.now
puts date.to_s(:db)

`to_s’: wrong number of arguments (given 1, expected 0) (ArgumentError)
“`

## 解決方法
to_sをto_fsに変更することで解消します。

“`ruby
date = DateTime.now
puts date.to_fs(:db)
“`

## 参考
https://scrapbox.io/ukuh1r8-86980398/Rails7%E3%81%8B%E3%82%89Active_Support%E3%81%AE%E4%B8%80%E9%83%A8%E3%81%AEto_s%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%ABformat%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E

元記事を表示

Rspec WrongScopeError発生

Rspecでテストを走らせた際に発生した問題について、備忘録として投稿します。

## 発生した問題

“`
Failure/Error:
raise WrongScopeError,
“`#{name}` is not available from within an example (e.g. an ” \
“`it` block) or from constructs that run in the scope of an ” \
“example (e.g. `before`, `let`, etc). It is only available ” \
“on an example group (e.g. a `describe` or `context` block).”

`name` is not available from within an example (e.g. an `it` block) or from construct

元記事を表示

【React導入】既存のRailsアプリにReactを導入する

## はじめに
この記事では、既存のRailsアプリにReactを導入する方法についてまとめています。

環境構築段階からReactを導入する方法についての記事は多いですが、途中からReactを導入する記事は少ないため、私自身かなり苦労しました。同じように苦戦している方の助けになれば幸いです。

https://ja.react.dev/

## 環境/前提
– Ruby 3.2.3
– rails 7.1.3.4
– TaiwindCSS使用
– Docker環境
– 「**esbuild**」で開発を行っていること
– バックエンド(ruby、rails)のみで環境構築していること

## Webpackerについて

以前は「Webpacker」を使用するのが一般的でしたが、最近では「Import Maps」や「esbuild」、「Vite」などの新しいツールが推奨されています。Webpackerは廃止されたわけではないですが、公式では使わない方向にシフトしています。この点を押さえておくと良いでしょう。

既存のRailsアプリにReactを導入するための記事が少なく、ChatG

元記事を表示

i18nの設定がconfig.i18nにまとまってconfig.action_viewは非推奨となった

Rails6からRails7へアップデートした時に、このような警告が出るようになりました。

“`zsh:
DEPRECATION WARNING: action_view.raise_on_missing_translations is deprecated and will be removed in Rails 7.0. Set i18n.raise_on_missing_translations instead. Note that this new setting also affects how missing translations are handled in controllers.
“`

警告の内容は、i18n(国際化)の設定を`config.i18n`にまとめたため、今まで使用していた`config.action_view`の方は非推奨になるというものです。

環境設定の中でi18nの設定をしている場合は、このように変更すると警告が出ななります

“`diff_ruby
– config.action_view.raise_on_missing_tr

元記事を表示

範囲オブジェクト

# 範囲オブジェクトとは
範囲オブジェクトとは、「〇から〇まで」のような、値の範囲を表すオブジェクトのこと。

## 作成方法
1から10までの場合以下のように表す。
“`
a = 1..10
a.include?(10)
=> true
“`
include?メソッドで確認すると、10まで範囲に含まれていることがわかる。
10を含めたくない場合は、「.」の数を3つにすることで範囲を10未満にすることができる。
“`
a = 1…10
a.include?(10)
=> false
“`

# 使用例
〇以上〇以下や、〇以上〇未満を判定したい時は、不等号を使用するよりも、範囲オブジェクトを使用した方がシンプルに記述することができる。

“`
def number_of_people(num)
1 <= num && num < 10 end ``` ↓ ``` def number_of_people(num) (1...10).include?(num) end ```

元記事を表示

君の名は?(配列でよく見かけるこいつ→<<)

※ChatGPTの解説と記事で使われたていた名前です。
日本語としては正確性には欠けるかもしれませんが、ひとまずこの名前で呼びたい。
外国の記事も添付してありますが”shovel operator”って呼んでるしまあセーフ

以下GPTによる解説
私が知りたかったのは1の配列の内容でした。

Rubyの「ショベル演算子(shovel operator)」、つまり`<<`演算子について詳しく解説します。この演算子は、複数の用途で使用される非常に便利な演算子です。以下に、各用途について具体的な例を交えて説明します。 ### 1. 配列への要素追加 `<<`演算子は、配列の末尾に新しい要素を追加するために使用されます。これは配列を変更する破壊的な操作です。 ### 例: ```ruby array = [1, 2, 3] array << 4 puts array.inspect # => [1, 2, 3, 4]
“`

この例では、配列`array`に`4`を追加しています。`<<`演算子を使うことで、新しい要素が配列の最後に追加されます。 ### 2. 文字列への連結

元記事を表示

VBのWith…End With ステートメントをRubyで実現するには

## 環境
Ruby2.6

## はじめに
Rubyを触っていて、その昔、VBでよく使っていた**With…End With ステートメント**が、Rubyでも使えないものだろうかと思いググってみました。

Rubyではどうも、**instance_execメソッド**を使って実現できるらしいです。

VBのWith…End With ステートメントは個人的には、わりと重宝して使っていたにも関わらず、Rubyのinstance_execメソッドについて書かれた記事はあまり散見されないようです。

instance_execメソッドの便利さはあまり認知されていないのだろうか。そこで、instance_execメソッドの便利さについて書いてみました。

https://learn.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/statements/with-end-with-statement

## メリット

instance_execメソッドを使うと、オブジェクト参照を複数行に渡って記述したいときに、反

元記事を表示

Railsでポリモーフィック関連付けを使用した柔軟なモデル関連付けの実装」

## はじめに
アプリ制作の過程で、ポリモーフィック関連を用いた実装を行いました。ここではその実装過程で得られた気づきをまとめます。ポリモーフィック関連について実際の例を交えながらなるべく分かりやすくまとめたいと思います。

## なぜポリモーフィック関連付けが便利なのか
例えば、ブログ記事にコメントを付ける機能を作ったとします。その後、イベントページにもコメントを付けたくなったとします。通常であれば、新しくコードを書き足さないといけないと思います。しかし、ポリモーフィック関連付けを使うと、既存のコードをほとんど変更せずに、イベントにもコメントを付けられるようになります。
それでは、実際にコードを見ていきましょう。

## モデルの設定
まず、モデルの設定から。`Article`、`Event`、`Comment`の3つのモデルを作ります。
“`ruby
class Article < ApplicationRecord has_many :comments, as: :commentable end class Event < ApplicationRecord has

元記事を表示

【Rails】You need to supply at least one validation エラーが発生したら

## 概要

Rails アプリでフォームデータを送信するとき、以下のようなエラーが発生しました。

“`
You need to supply at least one validation
“`

## 原因

このエラーは以下のように `validates` メソッドにバリデーションの内容が指定されないと発生します。

“`rb
class Profile < ApplicationRecord validates :user_id end ``` ## 対処法 このエラーを解決するためには `validates` メソッドに適切なバリデーションを指定します。例えば `user_id` が一意であることを検証するために `uniqueness: true` オプションを指定できます。以下のようにすると、エラーは解消されます。 ```rb class Profile < ApplicationRecord validates :user_id, uniqueness: true end ``` ## まとめ `validates` メソッドを使用する際は、バ

元記事を表示

【ActiveRecord】length vs size

# 目的
**ActiveRecord**の`length`と`size`について、しっかり理解した上で適切に使いこなせるようにする。
#### 補足
本記事は、レコード数の取得においてSQL文の発行数を抑えることの出来る`length`と`size`にフォーカスしています。
※`count`メソッドは、必ずSQL文を発行するため割愛(比較用で一部記載あり)

# ActiveRecordのlengthとsizeの違い

## `#size`
https://github.com/rails/rails/blob/main/activerecord/lib/active_record/relation.rb#L345-L352
“`rb:rails/activerecord/lib/active_record/relation.rb
# Returns size of the records.
def size
if loaded?
records.length
else
count(:all)
end
end
“`
:::note
– Loadされて

元記事を表示

Railsで共通パーツの一部をページごとに変更する方法

## はじめに

アプリ制作の過程で、ヘッダーの一部を特定のページで戻るボタンに変更するという実装を行いました。
ここではその実装過程で得られた気づきをまとめます。

## 本記事の内容
Railsで共通パーツとして使っているものの一部分を特定のページで変更する方法。

## ヘッダーのView
“`ruby:_header.html.erb

元記事を表示

【初心者向け🔰】CodeWars【学習サイト】

# はじめに

https://www.codewars.com/dashboard

Codewars というサイトをご存知でしょうか
いろんな言語のアルゴリズム問題を解くことができるサイトです。

類似するサイトで有名なものだと「AtCoder」や「Paizaラーニング」があります。

# Codewarsのオススメな点
個人的には、アルゴリズム問題サイトで一番オススメです。

## 時間制限がないから、学習に集中できる

:::note alert
PaizaラーニングやAtCoderは**時間が計測されます**。
また、Paizaラーニングでは**時間制限があります**。
:::

私的な話になりますが、時間が計測されていると集中ができません。

また、
– 「雑に書いても早くしたい」
– 「ミスの可能性とトレードオフに、スピードを求める」

ということが起こります。

これは学習とは真逆です。

また、実際の開発においても不要な考えだと思います。

この点、CodeWarsには**時間制限がない**ため、のびのびと学ぶことができます。

## トライ&エラーできて、学びの効率

元記事を表示

【Ruby】最近発見した便利な記述方法メモ

ここ数日qiitaを巡回していて見つけたRubyで完結に書ける実装方法メモ。
### |
“`ruby
array1 = [“a”, “b”]
array2 = [“b”, “c”, “d”]

array1 | array2
# => [“a”, “b”, “c”, “d”]
“`
配列と配列を結合して1つの配列を返す。
重複する要素は1つにまとめられる。
### &
“`ruby
array1 = [“a”, “b”]
array2 = [“b”, “c”, “d”]

array1 & array2
# => [“b”]
“`
共通する要素のみを取り出して配列として返す。
### array.map(&:method)
“`ruby
array = [“a”,”b”, “c”]
array.map(&:upcase)
# => [“A”, “B”, “C”]

array.map(&: * 2)
# => error
# mrthodじゃないから処理できない
“`
`array.map{|item| item.method}`を簡潔に書くことができる。

元記事を表示

[Rails]あ…ありのまま、今起こった事を話すぜ!「おれはorder(created_at: :asc)と実装したと思ったら、created_at descのSQLが実行されていた」

な… 何を言っているのかわからねーと思うが
おれも 何をされたのか わからなかった…

頭がどうにかなりそうだった…
[reverse_order](https://railsdoc.com/page/model_reverse_order)をチェーンしていただとか超スピードだとか
そんなチャチなもんじゃあ断じてねえ

もっと恐ろしいものの片鱗を味わったぜ…

ということで、前置きはここまでにして実際に私が体験した話です。

タイトルの通り`order(created_at: :asc)`と実装したのに、SQLは`created_at desc`と実行される実装について説明します。

ここまでの話だけで、パッと実装が思い浮かぶ方はActiveRecordマスターだと思います…!
私は10年弱Rails触っていますが、初めて気づきましたw

## 実装

わかってしまえば、やり方は簡単です。
Userというモデルがある場合、下記実装では発行されるSQLのorderは逆になります。

“`ruby
User.order(created_at: :asc).last
“`

`

元記事を表示

Rubyで連分数展開のプログラムを書いてみた

# 連分数とは

**連分数**とは、以下のように分母に分数が含まれているような分数です。ただし、 $a_n$ と $b_n$ は整数です。また、 $b_n$ がすべて $1$ の場合、**正則連分数**と呼ばれます。(この記事では正則連分数のみを対象とするので、以降 「連分数」 と表記したものは正則連分数を指します。)

“`math
x = a_0 + \frac{b_1}{a_1 + \frac{b_2}{a_2 + \frac{b_3}{a_3 + …}}}
“`

上記の $x$ が有理数の場合 $a_n$ は有限ですが、無理数の場合は無限に続きます。例として、黄金数 $\varphi = \frac{1 + \sqrt{5}}{2}$ は以下のように $a_n$ がすべて $1$ で、それが無限に続きます。

“`math
x = 1 + \frac{1}{1 + \frac{1}{1 + \frac{1}{1 + …}}}
“`

# 連分数展開とは

ある数を連分数に変形することを、**連分数展開** と呼びます。小数は以下の手順で連分数展開できます。

元記事を表示

マイグレーションファイルの修正、削除について

## 概要
・マイグレーションの扱いについて
・修正、削除する方法は2つある
・rails db:rollbackで修正、削除する方法
・コマンドラインを使用しての修正、

## マイグレーションの扱い
・テーブルの設計図や仕様のこと
・データーベースにテーブルを作成するために必要なファイル
・カラム名に対して、カラムの型を指定する
 integer型(数値)、string型(短文の文字)、text型(長文の文字)などがある

モデルを作成
“`
rails g model テーブル名(複数形)
“`

モデル作成時に生成されるマイグレーションファイルに必要な情報を記述する

“`
class CreateAddresses < ActiveRecord::Migration[6.0] def change create_table :addresses do |t| # t.カラムの型 :カラム名,     オプション t.string :postal_code, null: false t.string :cit

元記事を表示

OTHERカテゴリの最新記事