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

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

Rubyにおけるモジュールとは

<目次>
– [<Rubyリファレンスマニュアル – モジュール定義>](#rubyリファレンスマニュアル—モジュール定義)
– [<クラスとモジュールの共通点>](#クラスとモジュールの共通点)
– [1. モジュールの定義](#1-モジュールの定義)
– [2. 定数の定義](#2-定数の定義)
– [3. 例外処理](#3-例外処理)
– [<クラスにしかできないこと>](#クラスにしかできないこと)
– [1. インスタンスの生成](#1-インスタンスの生成)
– [2. 継承](#2-継承)
– [3. インスタンス変数とアクセサメソッド](#3-インスタンス変数とアクセサメソッド)
– [<モジュールにしかできないこと>](#モジュールにしかできないこと)
– [1. ミックスイン](#1-ミックスイン)
– [2. 名前空間の提供](#2-名前空間の提供)
– [<そもそも継承とは>](#そもそも継承とは)
– [<多重継承について>](#多重継承について)
– [多重継承のデメリット](#多重継承のデメリット)
– [<Ruby

元記事を表示

【Rails】each, find_each, find_in_batches の違い

# 前提
– 環境
– Ruby:`2.5`
– Rails:`4.2`
– 少々古めのバージョンになります
– ただ、次世代のバージョンにおいても本記事が参考になれば幸いです
– 今回扱うデータ
– ***company.rb***
– `has_many :shops`
– ***shop.rb***
– `belongs_to :company`
– データ数
– 事前に取得する ***company*** の件数を`50`件とします

つまり、下記コードで取得される***company***の件数が`50件`という前提で進めます。
“`rb
Company.joins(:shops).where(shops: { prefecture: ‘東京都’ }).distinct
“`

# each

“`rb:メインの確認コード
companies.each.with_index(1) do |company, i|
puts “loop_count: #{i}, company_id: #{company.id}”

元記事を表示

Rubyで発生した例外クラスをまとめてみた

# はじめに
Rubyでコードを書いていて発生したエラーを自分用にまとめてみました。

# NameError
定義されていない変数や定数を呼び出そうとすると発生するエラー。
呼び出す変数の名前を間違ったりしてよく起こしました。

“`ruby:変数名の間違い
name = “Taro”
#nameがnamaになっている
p nama
“`
“`:出力
undefined local variable or method ‘nama’ for …(NameError)
“`

# NoMethodError
メソッド名を間違えた時や、呼び出せないメソッドを呼び出そうとしたときに発生するエラー。
個人的にはレシーバが想定に反してnilになっている場合が多かったです。

“`ruby:メソッド名の間違い
a = [1, 2, 3]
#eachがeechになっている
a.eech do |n|
sum += n
end
“`
“`:出力
undefined method `eech’ for … (NoMethodError)
“`
“`ruby:privat

元記事を表示

[Rails] マークダウン形式でtext_areaに入力できるようにする

# commonmarker

– `gem commonmaker`をインストール
“`
gem ‘commonmarker’
“`
– helperに下記を記述
“`module ApplicationHelper
def markdown_to_html(text)
html = Commonmarker.to_html(text)
raw(html)
end
end
“`
– 例)show.html.haml
“`
= markdown_to_html(“# CommonMarker”)
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/fd44edd2-6589-33c2-5658-d29cded00577.png)

### 参考URL
https://github.com/gjtorikian/commonmarker

思いのほかサクッと実装できました。
何かご指摘あればお願いします!

元記事を表示

each_with_indexメソッド

each_with_indexメソッドを用いると、繰り返し処理の中で、配列の添え字も扱うことができる。

“`
animals = [“dog”, “cat”, “fox”]

animals.each_with_index do |animal,index|
puts “#{index}:#{animal}”
end
“`

これを実行すると、以下の結果になる。
“`
0:dog
1:cat
2:fox
“`

スタートを1からにしたい場合はindex+1とすると1から始めることができる。
“`
animals = [“dog”, “cat”, “fox”]

animals.each_with_index do |animal,index|
puts “#{index + 1}:#{animal}”
end
“`
“`
1:dog
2:cat
3:fox
“`

元記事を表示

【Ruby】ハッシュについて改めて振り返ってみる

こんにちは。あがさんです!!
アプレンティスへの参加を機に定期的に記事を投稿していきます。
どうぞよろしくお願いいたします。
ただの感想文になるかも…

## Rubyを学習していて
Rubyを学習をしていく中で、理解しているつもりでも全然理解していなかったところを記事にして再確認していきます。今回はハッシュについてです。
データの受け渡しに関わるコードを書いているとぶち当たる内容ですよね〜。

このあと簡単なコードで仕組みや振る舞いを再確認していきたいと思います!!

## ハッシュってなに?
ハッシュはキー(key)と値(value)の組み合わせでデータを管理するオブジェクトのことです
“`ruby sample.rb
ash_sample = {}
hash_sample = {“key_a” => 1, “key_b” => 2, “key_c” => 3}

p hash_sample # => {“key_a”=>1, “key_b”=>2, “key_c”=>3}
p hash_sample.class # => Hash         ・・・ Hashというクラ

元記事を表示

翻訳ファイルの反映を確認するときはサーバーを再起動するのが基本だろ?

新しく翻訳ファイルを追加したbranchを開いた際、viewに翻訳が反映されなかったので原因を4時間ほど探っていました。

– ファイルの場所
– ファイルの命名
– 設定の書き方
– ymlの書き方

多くの可能性を探りました。

しかし、ある記事を見た際に

‘gemをインストールしたらサーバーを再起動するのは基本中の基本です。’
という文言を見かけました。

今回の場合はgemをインストールしていたわけではないですが、以前取り組んだ教材に’翻訳ファイルに文言を追加した際はサーバーを再起動しよう!’みたいな文言があったことを思い出しました。

4時間という貴重な時間を割いた代償としてこの結論を得たのは不服ですが、解決したので今回は良しとしましょう。

元記事を表示

Railsにおけるエラーメッセージの日本語化

# 【課題】
### エラーメッセージをわかりやすい日本語に設定したい
#### 英語表記ではユーザーが視覚的に判断しにくい
#### エラーメッセージが出現した際に、パッと見で何でエラーが起きで弾かれてるのかを判断しやすくしたい

# 【実装】
①Gemファイルへの記述
“`ruby:Gemfile
gem ‘rails-i18n’
“`

②gemを設定したのでここでbundle instalを行う
“`ruby:ターミナル
$ bundle install
“`
③config/application.rbのファイルを編集
“`ruby:config/application.rb
module BoardApp
class Application < Rails::Application config.time_zone = 'Tokyo' config.active_record.default_timezone = :local # デフォルトのlocaleを日本語(:ja)にする設定 config.i18n.default_

元記事を表示

[Ruby]代表的な例外クラスとその説明を洗い出してみた

Rubyに定義されている例外クラスを調べてみました。

## Exception
https://docs.ruby-lang.org/ja/latest/class/Exception.html

– 全ての例外の祖先のクラス

## StandardError
https://docs.ruby-lang.org/ja/latest/class/StandardError.html

“`
継承リスト
StandardError < Exception ``` - 通常のプログラムで発生する可能性の高い例外クラスを束ねるためのクラス - StandardError とそのサブクラスは、 rescue 節でクラスを省略したときにも捕捉できる ### 主なStandardErrorのサブクラス #### ArgumentError https://docs.ruby-lang.org/ja/latest/class/ArgumentError.html - 引数の数があっていないときや、数は合っていて、期待される振る舞いを持ってはいるが、期待される値ではないときに発生 ```

元記事を表示

as_jsonとto_jsonの違いをまとめてみる

## はじめに
ActiveRecordのオブジェクトをJSON形式に直すときはto_jsonを使ってJSON形式に直していると思います。
それとは別に、as_jsonといったものもあります。
初めて見たときは、似てるけど何が違うんだろうと思っていました。
今回は、頭の中を整理しながら、違いをまとめてみようと思います。

## as_jsonとは
オブジェクトをハッシュや配列など、JSONエンコードが可能なオブジェクトに変換してくれます。特定の属性を含めたり除外したりできます。
とりあえず、どのような出力となるか試してみます。

### 1レコードをas_jsonした場合
1レコードの場合はハッシュ形式で表示されます。
“`rb
@users = User.find(1)

## puts @users.as_json
{“id”=>1, “name”=>”山田 太郎”, “email”=>”sample1@sample.com”, “created_at”=>”2024-07-20T13:46:10.150Z”, “updated_at”=>”2024-07-20T13:46:10

元記事を表示

【Ruby】Setクラスについてざっくり調べてみた

# なぜこの記事を書いたのか
業務中に簡単なコードを書こうとして「配列Aと配列Bで共通の要素を抽出できないか」ということを調べたときに、この`Set`クラスの存在を初めて知りましたが、結構便利そうなので興味本位で調べてみることにしました。

※自分がまじで低レベルなので鬼基本的な内容です(間違っていたらご指摘ください🙇‍♂)

# Setクラス。。?
– Rubyの標準ライブラリに搭載されているクラス(標準ライブラリなので`require(‘set’)`が必要)
– [class Set (Ruby 3.3 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/class/Set.html)から引用すると最初に以下のような説明がある👀

> 集合を表すクラスです。要素の間に順序関係はありません。

ちょっとこれだけだとピンとはこない。。。

– ただ、`集合`と`順序関係`がちょっとしたキーワードになりそう👀
– 以下でRubyにおける集合に関して、そしてsetクラスに関してをざっくり書いていきます

## Rubyにおける集合

本質的

元記事を表示

params[:id]とparams[:テーブル名_id]との違い

プログラミング歴、1年未満の初学者です。
タイトルでもある通り、params[:id]とparams[:cocktail_id](例)との使い分け方について、webアプリを作成中に知ったので、cocktailを例に上げて、書かせていただきます。

cocktail = Cocktail.find(params[:id])の場合
一般的に、詳細ページや編集ページに使われ、URL -> /cocktail/1となり、:idパラメータを探します。

cocktail = Cocktail.find(params[:cocktail_id])の場合
一般的に、config/routesでネストしたときに使われるそうです。URL -> /users/1/cocktails/1

ネストしたときとは↓
“`ruby:routes.rb
resources :users, only: %i[new create]
resources :cocktails do
collection do
get :bookmarks
end
end
“`

元記事を表示

ransackで”数値項目”と”文字列項目”を一緒に検索する場合

## はじめに
ransackを使用して、数値項目と文字列項目を一緒に検索した際にエラーが出たので、対処法について記載します。
今回はid(Integer),name(String)でor検索を実装して、どちらかに検索対象文字が含まれていたら表示するというコードを記載している際にエラーが出ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/fe7b61c4-c573-4683-937e-5eb612d5513f.png)

## エラー内容
38のついたid(No) / 商品名を検索しようと検索欄に38を入れて検索ボタンを押すと下記のエラーが出ました。
型が異なるので型変換してくださいねといった内容のエラーとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/34833601-f49a-555d-9558-9d9d334fff39.

元記事を表示

associationをキャッシュした場合の速度

## はじめに
N+1はパフォーマンスに影響することは知っていると思います。
ただ、パフォーマンスに影響するということはわかっても具体的にどれくらいの差があるのかを数値で見る機会は、なかなかったので、キャッシュしないものとキャッシュするものを比較してみたいと思います。

## テーブル関係
親usersテーブル、子postsテーブルを用意します。
“`rb:app/models/user.rb
class User < ApplicationRecord has_many :posts, dependent: :destroy end ``` ```rb:app/models/post.rb class Post < ApplicationRecord belongs_to :user end ``` ## seedの用意 以下のようなseedデータを用意します。データの件数は1000件です。 ```rb:db/seeds.rb 1000.times do |n| user = User.create!( name: "山田 太郎", email: "s

元記事を表示

【Rails】ArgumentError (Unrecognized status code :request_entity_too_large)

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

## 問題
コード
“`ruby
render body: nil, status: :request_entity_too_large
“`

エラー内容
“`ruby
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms | Allocations: 984)

ArgumentError (Unrecognized status code :request_entity_too_large):
“`

## 解決方法
Rails4.2からrequest_entity_too_largeはpayload_too_largeに変更されています。
request_entity_too_largeを使用している部分をpayload_too_largeに変更することで解消します。
“`ruby
render body: nil, status

元記事を表示

プログラミング問題をやってみた (paiza×Qiitaコラボキャンペーン、全25問)

全25問の解答例です.

## Dランク

Bash縛りを設けます.

### N倍の文字列 (スキルチェック通し番号44)

https://paiza.jp/works/mondai/d_rank_skillcheck_archive/square/

“`rb
#!/usr/bin/ruby
puts ‘*’*gets.to_i
“`

“`sh
#!/bin/sh
read n
for i in `seq ${n}`; do printf ‘*’; done
“`

### Eメールアドレス (58)

https://paiza.jp/works/mondai/d_rank_skillcheck_archive/email_address/

“`rb
#!/usr/bin/ruby
puts gets.chomp+’@’+gets.chomp
“`

“`sh
#!/bin/sh
read s
printf “${s}”
printf “@”
read s
echo “${s}”
“`

### 足し算

https://paiza.jp/works/mon

元記事を表示

HTML,CSS,Ruby,Railsなどの参考資料まとめ(自分用)

HTML

HTML辞典

→HTMLのデジタル辞書。わからなくなったらここから引く。

https://html-coding.co.jp/annex/dictionary/html/

CSS

・CSS辞典

→CSSのデジタル辞書。わからなくなったらここから引く。

https://html-coding.co.jp/annex/dictionary/css/

https://www.tagindex.com/stylesheet/properties/

Rails

・Railsガイド

→Railsのデジタル辞書。わからなくなったらここから引く。

https://railsguides.jp/

元記事を表示

[rails] pluckとselectの使い分け

## 経緯
あるプロジェクトで、特定のデータを集計して取得する必要がありました。最初にpluckメソッドを使用してデータを取得しましたが、取得したデータをハッシュ化する際に配列の順番を間違えてしまい、エラーが発生しました。これは、pluckメソッドが配列を返すため、各要素の順番を正しく処理する必要があるためでした。

## pluckメソッドとは
pluckメソッドは、ActiveRecordのクエリメソッドの一つで、指定したカラムの値を直接配列として取得する際に使用されます。例えば、以下のように使用します。

“`
user_data = User.where(active: true).pluck(:id, :name)

# => [[1, “Alice”], [2, “Bob”], [3, “Charlie”]]
“`
このクエリは、activeカラムがtrueのユーザーのidとnameを配列として取得します。しかし、複数のカラムを取得した場合、各要素の順番を意識する必要があります。

#### メリット
・シンプルで高速なクエリ実行
・必要なカラムのみを取得するため、メモ

元記事を表示

【個人開発】釣り具の登録、管理、検索ができるアプリを開発しました🎣

# はじめに
こんにちは![レイ](https://twitter.com/ida09r)と申します!

未経験からエンジニア目指して日々学習をしております。

今回、釣り道具に特化した「[Tackle Master(タックルマスター)](https://tacklemaster.net/)」というサービスを開発しました。

釣りに興味のある方や好きな方には、ぜひ使っていただけると嬉しいです。

### 自己紹介

地元の工業高校で情報系コースを専攻し、PC操作やプログラミング(Python、SQL、HTML/CSS)を簡単に学びました。
卒業後は総合化学品メーカーで製造オペレーターとして約3年間勤務。その際、社内ITシステムに助けられた経験から、システム開発に興味を持ちました。

2024年2月からプログラミングスクール「RUNTEQ」に入学し、エンジニアを目指しています。

# 1.サービス紹介

「Tackle Master」は釣り道具に特化したサービスで、釣り道具の管理・登録・検索ができます。

![tackle_service.jpg](https://qiita-image

元記事を表示

Ruby: any?メソッドについて

補足 2024 07/19
@scivolaさんよりご指摘いただいた内容を反映

## 読んで欲しい人

– any?メソッドがわからん人
– 過去の俺

## 動作環境

– ruby 3.3.0

## any?メソッドとは

– 配列やハッシュなどのコレクションに対して使用する
– ~~要素内に1つでもtrueを見つければtrueを返す。全ての要素がfalseならfalseを返す~~
– 1 つでも真な要素があれば true を返す。全ての要素が偽なら false を返す

“`ruby
[nil, false, nil, false, true].any?
=> true
“`

– ブロックで条件を指定できる

“`ruby
[1, 2, 3].any? { |v| v > 3 }
=> false
“`

*追記: 2024/07/19*
– 全ての要素が偽というのは、要素がない場合にも成り立つ

“`ruby
[].any?
=> false
“`

## なんで配列、ハッシュの要素1つ1つをチェックできるのか?

`any?`はEnumerableモジュール

元記事を表示

OTHERカテゴリの最新記事