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

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

【Rails】動的にDBのテーブルにカラムを追加してみる

どうもこんにちは。

今回は、動的にDBのテーブルにカラムを追加する方法をメモしていきます。

# 動的にカラムを追加とは?

本来であれば、DBのテーブルにカラムを追加する場合には、以下のような手順を踏むと思います。

1. マイグレーションファイル生成

“`sh
rails g migration AddNewColumnToSample
“`

2. マイグレーションファイル編集

“`ruby
class AddNewColumnToSample < ActiveRecord::Migration[7.0] def change # addcolumn :テーブル名, :カラム名, :データ型 add_column :samples, :new_column, :string end end ``` 3. マイグレーション実行 ```sh rails db:migrate ``` しかし、「custom_itemsテーブルにデータが登録された場合に、登録されたデータの名前でsamplesテーブルにカラムを追加したい」ということが出てきます。

元記事を表示

rubyXLのエクセル出力で部屋に属する所属毎にシートを分けてusersを書き込んでいく

## はじめに
開発で部屋に属する所属毎にシートを分けてエクセル出力する必要があり、ある程度実装ができたのでまとめる。
初学者やrubyXLでエクセル出力を実装しようとしている方々に少しでも参考にもなれば嬉しいのですが、
なんちゃってエンジニアによる自分のアウトプット用の投稿なので、よくないコードの書き方や、または分量的に省略している箇所もございますのでご了承をお願いします。
アドバイスがありましたらコメントを頂けますと幸いです。

## 出力フロー
roomの詳細ページから出力し、roomに紐づいているユーザー(users)を所属毎(affiliations)にシートを分けて用意してあるエクセルファイルに書き込んで出力します。
usersは中間テーブルのroom_usersを経由して取得します。

## テーブル構図
roomsテーブル(部屋)
|rooms|
|:–|
|id|
|name|

affiliationsテーブル(所属)
|affiliations|
|:–|
|id|
|name|

usersテーブル
|users|
|:–|
|id|
|name|
|af

元記事を表示

Rubyでインタラクティブな問題に回答する

## 背景
– 競技プログラミング(AtCoder)の問題を解いていたところ、インタラクティブな問題への回答に詰まったので調べたことをまとめます。
– インタラクティブな問題例

https://atcoder.jp/contests/abc337/tasks/abc337_e

## 結論

“`ruby
# NG
puts ‘answer1’
puts ‘answer2’
puts ‘answer3’

# OK
puts ‘answer1’
$stdout.flush

puts ‘answer2’
$stdout.flush

puts ‘answer3’
$stdout.flush

# もしくは
$stdout.sync = true

puts ‘answer1’
puts ‘answer2’
puts ‘answer3’
“`
– `puts` だけでは不十分で、 `puts` の後に `$stdout.flush` を呼び出す必要がありました。

## 補足

– `$stdout` は 組み込み変数 [参照1]
– `

元記事を表示

rails g model と rails g migration の違い

# はじめに
`rails g model`と`rails g migration`の違いについて、なんとなくの理解しかできていなかったので備忘録としてまとめます。
# rails g modelとは
このコマンドは、新しいモデル(データベーステーブルの設計図)を作成します。モデルはデータベースのテーブルに対応し、アプリケーション内でのデータの取り扱いやロジックの管理に使用されます。
コマンドの記述方法は以下のようになります。
“`
$ rails g model モデル名 カラム名:データ型
“`
## 実行方法
例えば、以下のコマンドを実行すると、Userモデルに対応するデータベーステーブルを作成するマイグレーションファイルが生成されます。
“`
$ rails g model User name:string email:string
“`
続いて、このマイグレーションを実行して変更をデータベースに適用します。
“`
$ rails db:migrate
“`
# rails g migrationとは
このコマンドは、手動でマイグレーションファイルを生成します。主に

元記事を表示

【Ruby】mapメソッドとindex_byメソッド(初学者)

私は現在、未経験からのエンジニア転職に向けてプログラミングスクールで学習をしている、いしかわと申します。

`mapメソッド`と`index_byメソッド`について理解を深めたく学習した内容をアウトプットとしてこちらの記事にしました。
どなたかの参考になれば幸いです。

:::note warn
プログラミング初学者なので、内容に誤り等ある可能性があります
誤りがありましたら教えてくださると幸いです
:::

# mapメソッド
配列の要素の数だけブロック内で処理を繰り返して、新しい配列を返す。
“`ruby
hoges(配列).map { |hoge| 実行する処理 }

# 実行する処理が複数行に渡る場合
hoges(配列).map do |hoge|
実行する処理
“`
“`ruby:具体例
user_ids = all_requests.map { |request| request.user_id }
user_ids = [1, 2, 3, 4, 5, 6, ….. , 100]
# all_requestsに1~100のuser_idが含まれている場合, こ

元記事を表示

ActiveHashの初期値を設定したらエラーメッセージが出てこなかった件

# はじめに
プログラミング初心者ですので、、温かく見守って頂けると幸いです。
何か間違っていたらコメントお願いします。
# エラーメッセージが出てこない
[![Image from Gyazo](https://i.gyazo.com/47e4958e4b02fbe12628de441de857c8.png)](https://gyazo.com/47e4958e4b02fbe12628de441de857c8)
ActiveHashを使用した入力フォームの初期値に上記のような初期値を設定していましたが、そうするとエラーメッセージが出ないという状況に陥りました。
しかも、初期値ではエラーメッセージ出ないのに、普通に項目を選択して保存しようとすると、”Category can’t be blank”というエラーが、、、(選択してるのに、、、)

# 解決
原因ははっきりしていませんが、修正した箇所としては、
idを0~から始めるのではなく1~から始めた。(上記の画像は修正後)
ビューのnew.html.erbの
**<%= f.collection_select(:category_i

元記事を表示

【Rails】選択画像のプレビューを動的に表示させる

画像のプレビュー機能をシンプルに書きたいと思い、JavaScriptのFileReaderで実装しました。メモとして残します。

# やりたいこと
1. input tyupe=”file”の`ファイルを選択`ボタンをクリックして画像ファイルを選択する。
1. プレビュー枠の画像が選択した画像に置きかわる。

# 実装環境
– Ruby on Rails
– Slim
– Carrier wave
– JavaScript

# 実装コード
必要なコードのみ抜粋します。

“`slim
/ form_withのコードの一部
label
= form.file_field :image, class: ‘d-none’, onchange: “previewImage(this, ‘previewImageField’)”
span.btn.btn-secondary ファイルを選択
= form.hidden_field :image_cache
/ プレビュー枠
– if hoge.image.present?
= image_t

元記事を表示

【rails】Rspecおける基本事項まとめ

# 事前準備

1.下記のgithubより Gemfileに追加するコードを確認し、
gemfileに記述する。
“`
# Run against this stable release
group :development, :test do
gem ‘rspec-rails’, ‘~> 6.1.0’
end
“`

https://github.com/rspec/rspec-rails?tab=readme-ov-file#installation

2.bundle installコマンドにて上記のgemライブラリをインストールする。

3.docker-compose run web bundle exec rails g rspec:installにてrspecを実行するためのファイルを作成する。

→ railsファイル直下に“spec > spec_helper.rb“が生成される。

4.docker-compose exec web bundle exec ra
ils g rspec:model Model名
にてModelにおけるテスト用のファイルを

元記事を表示

Railsで作ったシステムのER図を日本語で出してほしいと言われたときにやったこと

Ruby on Railsを使った開発をしていると「システムのER図が欲しい」といったお願いされることがあります。

Railsを使っているのであれば、[rails-erd](https://github.com/voormedia/rails-erd/tree/master) というRubyGemを使うことで簡単にER図を出力できます。

https://github.com/voormedia/rails-erd/tree/master

rails-erdで出力されるER図はEntityもAttributeも全て英語です。

![erd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/96fe287e-0c02-5af4-4c64-d9bc974b1f7e.png)

提出先がエンジニアである場合や、普段からモデル名を使ったコミュニケーションをしている場合であればこのままでもなんとかなるかもしれません。

一方、相手がビジネスサイドのメンバーである場合や、普段はモデルを日本語変換してコミ

元記事を表示

ネーミングバトラー

Rubyでネーミングバトラーを作成しました。

“`Ruby
# ネーミングバトラー

def hitpoint()
hp_value = Random.new()
hp_value = rand(200)
return hp_value
end

def attach()
attach_value = Random.new()
attack_hp = rand(50)
return attack_hp
end

puts “名前を入力してください”
str1 = gets.chomp
HP1 = hitpoint

puts “名前を入力してください”
str2 = gets.chomp
HP2 = hitpoint

while true
puts str1 + “の攻撃”
A_HP2 = attach
HP2 = HP2 – A_HP2
puts str2 + “に” + A_HP2.to_s + “ポイントのダメージ”
if HP2 <= 0 then puts str1 + "の勝ちです" puts str1

元記事を表示

【Ruby】Procの基礎を理解する

# Procクラス
https://docs.ruby-lang.org/ja/latest/class/Proc.html

– ブロックをオブジェクトとして扱いたい時に使用するクラス
– ブロック
– メソッドの引数として渡すことが出来る処理のまとまり
– `do .. end`, `{ .. }`
– Procは、クロージャに相当する

“`rb
i = 100
pr = Proc.new { i += 1000 } # proc { i += 1000 } も同様

p pr.call #=> 1100
p i #=> 1100

p pr.call #=> 2100
p i #=> 2100
“`

# クロージャとは

>[手続きをオブジェクトとして扱う機能があります。このオブジェクト化された手続きのことをクロージャと呼びます。](https://docs.ruby-lang.org/ja/latest/doc/spec=2fintro.html#:~:text=%E5%88%B6%E5%BE%A1%E6%A7%8B%E9%80%A0%E3%81%

元記事を表示

【個人開発】Ruby on Railsで勇者一行を作って魔王を討伐したい!

# ドラクエは、好きですか?
このメンバーで魔王倒したいとか、勇者一行に混ざりたいな〜とか。
皆様も人生で一度は考えたことありますよね?そうですよね。
僕もそう思いました。思い立って旅立ちました。冒険ですね。

# 私は勇者ではありません
初めまして、あやたかといいます。
2022年10月からプログラミングスクールに通ってRubyを中心に学習。
転職活動の後、C#を扱うエンジニアとなりました。
この記事を書いてる時点で、エンジニア10日目です。赤ちゃんですね。

仕事とは別で個人で開発をしようと考え、アウトプットの一環として
開発備忘録的なものを書いていきます。

# 魔王討伐のパーティって楽しそう
常日頃考えています。妄想の日々ですね。
ですが、私も30年生きてきたいい大人なので現実では出来ない事は重々承知しています。
というわけで、せっかく学んだRubyとRailsで作ろうと思います。
現実的にどこまで出来るかとか分からないので、目標を段階的に見ていきます。

# 自分のキャラを育ててステータスを上げ、職業や二つ名をつけたい
もう考えてるだけで楽しいですね。
自分の好きな名前のキャ

元記事を表示

`length` `size` `count`の使い分け【後編:Rails】

# はじめに
[`length` `size` `count`の使い分け【前編:Ruby】](https://qiita.com/kohki_takatama/items/c8236b6a2e267e2dad20)の続きですが、この記事だけでも完結した内容になっています。

Rubyの`length` `size` `count`を調べてる間に気づいた、「Railsだと定義が違うぞ・・・・・・」
ということで、Railsでも`length` `size` `count`について調べていきます。
※注記しない限り、`count`は引数を与えないものとします。
## この記事のまとめです
### Rails (`ActiveRecord`) の`length` `size` `count`
正確には`AcriveRecord::Associations::CollectionProxy`です。
コレクションとは、配列やハッシュなど要素の集まりのことです。
– `length`:コレクションをメモリにロードし、要素数を取得します。
すでにメモリ上にあれば、その要素数を取得します。
– `

元記事を表示

Ruby on RailsにおけるN+1問題

## 概要
N+1問題は、1つのクエリによって複数のレコードを取得した後、
各レコードに対して関連するデータを取得するために追加のクエリが必要になる状況を指します。

N+1問題が発生すると、データベースへのアクセス回数が余計に多くなってしまいます、それはデータベースに対するクエリの数が大幅に増加するからです。

## N+1問題の原因

N+1問題が発生する原因は、データモデル間のアソシエーション・関連にあります。
Ruby on Railsでは、データモデル間にアソシエーションを定義することで、関連するデータを取得することができますよね?

### 具体例

1.ブログアプリケーションで、すべての記事を取得し、
2.それぞれの記事に対して投稿者の情報を表示する必要があるとします。
一見、効率的に見えるこの操作が、実際には非効率的になることがあります。

ステップ1: すべての記事を取得するためのクエリ。
ステップ2: 各記事に対して、投稿者情報を取得するための追加クエリ。
ここで問題となるのは、ステップ2での繰り返しクエリです。記事の数が多いほど、データベースへのクエリ数が増加し、

元記事を表示

`length` `size` `count`の使い分け【前編:Ruby】

# はじめに
みなさん、Rubyの `length` `size` `count` の使い分け、気になりますよね??🤗
そう思って!公式リファレンスも含め調べたんですが、どれもいまいちしっくりこない。
以下、しっくりこなかったリスト
– `size`と`length`は全く同じ挙動をする(ほんとに?根拠は?)
– 条件付きなら`count`でそれ以外は`size` `length`(なぜ?)
– `count`は重い(なぜ?)

なぜ ↑ のように言われるかがわかるようになっています。

なお、Railsの場合(ActiveRecord)は挙動が違うので後編で書きます。
(2024 / 01時点の言語仕様に基づいた情報です)
## この記事のまとめです
### Ruby の`length` `size` `count` の挙動
特に言及のない場合、`Array`クラスについて話しています。ただし、「`Enumerable`モジュールの`count`」を除き、どのクラスでも同様の挙動だろうと思います(`String`クラスなど)

– `Array.length` `Array.size

元記事を表示

初心者必見!ChatGPTとOSSで爆速プログラミング学習!〜もうつまらない本もプログラミングスクールもいらない〜

# はじめに
はじめまして。都内のSaaS企業でバックエンドエンジニアをしているハセガワカンタです。今回はプログラミング言語のおすすめの学習方法を書いていきます。
プログラミング言語の学習は大変ですよね。何をどう学べばいいのか、どんな資料が役に立つのか、気軽に質問できるエンジニアが周りにいればいいですが全員がそうとは限りません。
しかし今は令和、そんな時の強い味方、ChatGPTの話をしようと思います。ChatGPTは大学のレポートを書いてくれるだけではなく、プログラミングを学ぶ上でめちゃくちゃ便利なんです。コードを投げれば、分かりやすい解説をくれるし、具体的な例も出してくれるので、理解が深まります。
この記事では、ChatGPTがどうやってプログラミングの学習を助けてくれるのか、その魅力と使い方をお伝えします。さあプログラミング初心者の方も、新しい言語を覚えたいベテランの方も、ChatGPT大先生を使って爆速で学習を進めましょう。

# プログラミング言語を学習することの難しさ
### 本やドキュメントを読んでも頭に入ってこない
プログラミングを学ぶとき、まず最初に本やドキュメントを

元記事を表示

【AtCoder】AtCoder Beginner Contest 336 解法メモ【Ruby】

# はじめに

ABC336に参加しました。
今回、A~Dの4問完答できたのでD問題までメモしていきたいと思います。

# [A – Long Loong](https://atcoder.jp/contests/abc336/tasks/abc336_a)

`Long`の`o`を指定の数だけ結合する問題。

文字列結合ができれば良いので特に問題はない。強いて言えば、文字をn個繋げる処理をどう実装するか、が問題になるが、Rubyには`String#*`が定義されているので難しくない。

自分の回答

“`ruby
puts “L#{“o” * gets.to_i}ng”
“`

# [B – CTZ](https://atcoder.jp/contests/abc336/tasks/abc336_b)

整数を2進数表記したときに、末尾に連続する0の数を求める問題。

色々定義されているが、2進数表記に直して末尾から0の個数を数えるだけで良い。

自分の回答
元記事を表示

Progate +α メモず【Ruby on Rails ⑩⑪】

# はじめに
Ruby on Railsラストです!!
いつものごとくメモの羅列なので、気になる見出しからお読みください。
# メモず
## 「いいね」を新しいテーブルで管理するワケ
– 既存のテーブル`users` `posts` じゃダメなの?
いいけど、それぞれのテーブルが「いいね」情報で肥大化して、パフォーマンスが落ちるかも。
– 「いいね」を新しいテーブルにするメリット
– コードロジックが整理され、理解しやすくなる。メンテナンス性も上がる。
– 例:`if Like.find_by(user_id:@current_user.id, post_id:@post.id)`の`if`文のみで、いいねしている場合、してない場合の挙動を設定できる。
– テーブルとして独立していると、スケーラビリティが向上する(読み書きの負荷分散・時間や地域によってサーバーを分割・クエリの最適化)。
## `link_to`メソッドの中でアイコンを使うには
“`erb
<%= link_to("URL") do %>

<%

元記事を表示

Rubyの「*」記号ってなんなの、という疑問について調べた

Rubyにおいて、「*」記号は以下の用途で使われます

## 数値の乗算
Rubyでは、他の多くのプログラミング言語と同様に、「*」記号は数値の乗算に使用されます。

“`ruby
result = 3 * 4 # resultは12になります
“`

## 配列の繰り返し
「*」記号を使って、配列内の要素を指定した回数だけ繰り返すことができます。

“`ruby
repeated_array = [1, 2, 3] * 3 # repeated_arrayは[1, 2, 3, 1, 2, 3, 1, 2, 3]になります
“`

## 文字列の繰り返し
「*」記号を使って、文字列を指定した回数だけ繰り返すこともできます。

“`ruby
repeated_string = “abc” * 2 # repeated_stringは”abcabc”になります
“`

# 可変長引数
メソッド定義において、引数の前に「*」を付けることで、任意の数の引数を受け取ることができます。
これは「スプラット演算子」とも呼ばれます。可変長引数については別途まとめを作成する予定です。

元記事を表示

rails勉強2日目

:::note info
インフォメーション
間違いがあるかもしれないです。
:::

## 二日目です
ちゃんと二日目もさぼらずに投稿できてます!!
えらい!!!

## どこまで勉強したのか
progate railsコース2まで終わりました。
## 何を学んだのか
rails consoleを使ったdb導入
“`
rails console
“`
post1に入れたいときは
“`
post1 = post.new(content:”ここに入れたい文字列を導入”)
“`
“`
<% posts.each do |post| %>

<%= post %>

<% end %>
“`
これで@postsに保存されているものが表示されます。

元記事を表示

OTHERカテゴリの最新記事