Ruby関連のことを調べてみた2023年01月04日

Ruby関連のことを調べてみた2023年01月04日

uninitialized constant ◯◯[定数名] (NameError)への対処法

# 概要

PF作成中にdockerでサーバーの起動を試みた際、
uninitialized constant OmniAuth (NameError)というエラーが表示。
つまづいたので記録として残します。

# 対処法

①以下項目を確認
・ファイル名とclass名が一致しているか?
・ファイルpathとmoduleの定義が一致しているか?
・Railsにファイルを読み込ませているか?
(引用元と詳細:https://qiita.com/yoshixj/items/17de45928f52264fd6a0)

②サーバー起動時に問題が発生した場合は、当該定数のGemがインストールされているか確認

以上です。

# ちなみに
私は②でした。
そもそもGemfileにomniauth-twitter(定数OmniAuthを使うためのGem)を記載していませんでした。

ミスは大体単純な所で発生しがち、気をつけます。

元記事を表示

【わたし気になります!】RubyのArray#forty_two

Rubyには、配列の先頭の要素を取得するメソッドや2番目の要素を取得するメソッドなど、特定の位置にある要素を取り出すメソッドが用意されています。
“`ruby
array = %w(apple banana orange lemon grape)
array.first # apple
array.second # banana
array.last # grape
“`

実際、私はこの3つくらいしか使ったことがないですが、他にも多くのメソッドが用意されています。

“`ruby
array.first # 先頭の要素を取得
array.second # 2番目の要素を取得
array.third # 3番目の要素を取得
array.fourth # 4番目の要素を取得
array.fifth # 5番目の要素を取得
array.forty_two # 42番目の要素を取得
array.third_to_last # 最後から3番目の要素を取得
array.second_to_last # 最後から2番目の要素を取得
array.last # 最後の要素を取得

元記事を表示

開発をはじめて半年の私がデータの並び替えで使えるなぁと思ったもの

開発業務に携わって半年、
データの並び替えで使えるなぁと思ったものを2つ書き留めておきます。

開発環境
・Ruby
・Rails
・MySQL
・Mac

なお、この記事で「order」とは、「取得したレコードを特定のキーで並び替える」ことを指します。
[参考] https://railsdoc.com/page/model_order

#### 今回使うテーブル
Naoさん、Kenさん、Mikaさんのやることリストテーブルを仮定します。
contentはやることリストの内容、personは人、categoryは項目のカテゴリー、dateは日付を格納する想定です。

“`
+—-+————+——–+————–+————+
| id | content | person | category         | date |
+—-+————+——–+————–+————+
| 1 | 女子会 | Nao | frie

元記事を表示

【わたし、気になります!】偶数丸め

## はじめに
今回は、モブで開発中にチームメンバーがポロッと言った

**「Rubyのroundメソッドのデフォルトって偶数丸めじゃなくて四捨五入だよね?」**

という一言をきっかけに偶数丸めについて調べたことを書き留めておこうと思います。

## 目次
1. 偶数丸めについてのざっくり説明
2. 偶数丸めを使ってみた
3. 偶数丸めで行っている処理
4. 偶数丸めはいつ使う?

## 1. 偶数丸めについてのざっくり説明

偶数丸めとは、端数処理の一種で、処理対象がちょうど半分の値の場合、もっとも近い偶数に丸めるという処理のことを指します。
端数処理で一般的な、四捨五入では`1.5`を小数第一位で丸めると`2`になり、`2.5`を小数第一位で丸めると`3`になりますが、偶数丸めでは、`1.5`を小数第一位で丸めると`2`になり、`2.5`を小数第一位で丸めると`2`になります。

例えば、
`1.5 + 2.5 + 1.5 + 2.5 + 1.5 + 2.5 + 1.5 = 13.5`ですが、
各値を四捨五入して足し算を行うと
`2 + 3 + 2 + 3 + 2 + 3 +

元記事を表示

【オブジェクト指向設計実践ガイド】依存関係編

# はじめに

[【オブジェクト指向設計実践ガイド】SRP編](https://qiita.com/EbiTT/items/37f96825f65f23325b5e)の続き。
今回は異なるオブジェクト間の依存関係をいい感じにする方法について考えていきます。

# 特定のオブジェクトのインスタンスに依存しないこと

特定のクラスのインスタンスに依存するコードの例を出してみましょう。人間を表すHumanクラスの他にTwitterのユーザを表すTwitterUserクラスを追加し、新たにHumanクラスに呟くメソッドを足してみましょう。

“`ruby
+ class TwitterUser
+ def tweet
+ # … Twitterでツイートする実装
+ end
+ end

class Human
# これはデータ
attr_reader :weight, :height
def initalizer(:weight, :height)
@weight = weight
@height

元記事を表示

【Rails】SNS機能で相互フォロー一覧を取得する

フォロー一覧、フォロワー一覧を実装する記事はよく見かけるのですが、相互フォロー一覧を取得する実装は見かけなかったので、今回記事にしました。

## 前提
基本的なフォロー・フォロワー機能がすでに実装してあることが前提となります。
具体的には以下のような実装を前提としています。

## モデル

“`ruby: user.rb
class User < ApplicationRecord has_many :relationships, class_name: 'Relationship', foreign_key: 'follower_id', dependent: :destroy, inverse_of: :follower has_many :reverse_of_relationships, class_name: 'Relationship',

元記事を表示

Rubyで二分岐検索を書いてみる

## 環境
Ruby2.6

## はじめに
Rubyで書いた二分岐検索のコードについて、解説したいと思います。二分岐検索とは、簡単にいえば、たくさんのデータの中から探したいデータを、効率的に検索するためのアルゴリズムです。プログラミング言語を学習するとき、一度くらいは、二分岐検索のコードを書いたことがある人は多いかと思います。しかし、二分岐検索のアルゴリズムそのものは、仕事で使うことは殆どないかと思います。折角学習しても、殆どの人は、役に立てることがありません。それでも、言語の学習教材としては、うってつけのアルゴリズムだとは思います。

二分岐検索の詳細についてはこちらをご参照ください。
https://e-words.jp/w/%E4%BA%8C%E5%88%86%E6%8E%A2%E7%B4%A2.html

## コードの解説

“`
gets.chomp.to_i
“`
標準入力で入力した値を取得して、数値に変換します。getsしただけでは、改行コードがついているため、chompで改行コードを取り除きます。

“`
ary.sort!
“`
ランダムに作った配列を昇順

元記事を表示

【Rails】エラー Mysql2::Error: Table ‘〇〇_development.〇〇’ doesn’t exist: 

# 概要
アプリ作成時、コントローラ、モデルを一気に作成し、その後
“`$ rails db:migrate“` コマンド実行でタイトルのエラー。
解決方法をまとめます。

# 結果
“`rails db:migrate:status“` でdown状態を確認後、
マイグレーションファイルの日時部分を入れ替え、
“`$ rails db:migrate “`で解決。

![スクリーンショット 2023-01-03 16.55.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2235743/b5c32f8d-ec10-0936-ded1-d90ae7ebb106.png)

青丸の部分を入れ替えます。

# 原因
外部キー、モデル作成($rails g コマンド)の実行順番が原因でした。

以下、画像のcommunity_topic、article、community_topic_tagテーブルで解説します。
![スクリーンショット 2023-01-03 16.42.12.png](ht

元記事を表示

Dockerを動かしてみた(Ruby2.7 簡易webサーバー構築)

# はじめに
dockerを使った開発をしたことがないので、環境構築してみたことを備忘録として残しておく。
dockerが何なのか、メリットデメリットなどはそこらじゅうに解説サイトなどがあるので、ここでは割愛する。

# 環境
* MacBook Air (Retina, 13-inch, 2020)
* macOS Monterey version 12.6

# やりたいこと
dockerをインストールし、誰かが作った環境を動かしてみる。
期待すること:自身のPCにインストールせずとも、同じように動かせるはず。

# やったこと
1. 以下のサイトで、Docker Desktop for Macをインストール
https://matsuand.github.io/docs.docker.jp.onthefly/desktop/mac/install/
※インテル用と、M1チップ用があるので注意。

2. docker Desktopのチュートリアルに従って操作してみる。
公式チュートリアルの和訳をされているページがあったので、参考にさせていただきました。[和訳](https://

元記事を表示

【オブジェクト指向設計実践ガイド】SRP編

# はじめに

あけましておめでとうございます
今回は昨年末に参加させて頂いたインターンで会社に購入頂いた[オブジェクト指向設計実践ガイド](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%EF%BD%9ERuby%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-%E9%80%B2%E5%8C%96%E3%81%97%E3%81%A4%E3%81%A5%E3%81%91%E3%82%8B%E6%9F%94%E8%BB%9F%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E8%82%B2%E3%81%A6%E6%96%B9-Sandi-Metz-ebook/dp

元記事を表示

Rubyでループ文

Rubyでループ文を作ります

“`Ruby
test1 = [10,20,30,40]
num = test1.length

for i in 0…num do
puts test1[i]
end
“`

元記事を表示

Ruby 3.2 で導入された Integer#ceildiv とは

Ruby 3.2 で `Integer#ceildiv` なるメソッドが導入された。これはどういうものか。

# 用途

テニスボールが 15 個ある。これを「4 個入るケース」に詰めて保管しておきたい。ケースはいくつ必要か。

15 を 4 で割ると 3 余り 2。ということは,3 ケースに 4 個ずつ詰めて,半端の 2 個を別の 1 ケースに入れることになるので,ケースは計 4 個必要になる。

この計算は,Ruby でやるなら

“`rb
p 15 / 4 # => 3
# あるいは
p 15.div(4) # => 3
“`

で,3 に 1 を足せばよいと分かるわけだが,整商(整数の商)にいつも 1 を足せばよいわけではない。

ボールが 12 個なら半端が出ないので,`12 / 4` がそのまま答えになる。

つまり,整商と剰余の両方を `divmod` で求めて

“`rb
p 15.divmod(4) # => [3, 2] # この場合,3 に 1 を足す
p 12.divmod(4) # => [3, 0] # この場合,3 がそのまま答え
“`

と考えな

元記事を表示

ユーザー管理機能(Devise)について

# deviseとは
webアプリケーションにおいて認証機能を実装するためのgemです。

# 導入方法
1\. ターミナルにてcdコマンドを使い、作成しているAppのディレクトリ内に移動する

2\. Gemfile内で追記する
“` .Gemfile
gem ‘devise’
“`

3\.ターミナル内にてGemをインストール
“` .terminal
bundle install
“`
:::note info
gemをインストールした後はローカルサーバーを再起動する
:::

4\.deviseの設定ファイルを作成
“`.terminal
rails g devise:install
“`

# deviseのモデルを作成
1\.モデルの作成
“`.terminal
rails g devise [モデル名]
“`

2\.テーブルに必要なカラムを追加
モデルを作成するとdb/migrateのディレクト内に先程生成したdeviseのモデルテーブルが生成されている。そのファイル内で追加を行う

:::note info
ex)nicknameを文字列型、空なしにす

元記事を表示

git mergeしたらnot something we can mergeが出たので解決してみた

今回はgit mergeを実行しようとした以下のエラーが発生した

“`
merge: sigh-up – not something we can merge
“`

解決策

ブランチ名をコピペしたらいけた。

ブランチを確認して、マージしたいブランチ名をここでコピーします。
“`git
git branch
filling-in-layout
* main
modeling-users
rails-flavored-ruby
sign-up
static-pages
“`

コピーしたマージ名をペーストしてあげると解決できました。
“`
git merge <マージ名> #マージ名を入力するときだけペーストする。
“`

考えられる原因

おそらくタイプミスなのですが、ぱっと見はよくわかりませんでした。なので、この手のエラーが出たらとりあえずブランチ名をコピペしてみるといいかもしれないです。

元記事を表示

redirect_to @userは redirect_to user_url(@user)と同値

以下の二つのコードは同値です。
“`Ruby
redirect_to @user
“`

“`Ruby
redirect_to user_url(@user)
“`

元記事を表示

投稿のコメントにYoutubeのURLを入れ込む方法

今回はユーザーが投稿した投稿にコメントをする際にYoutubeのURLを埋め込む方法を紹介します。

投稿のコントローラー:favorite(普段自分が使っているコントローラー)
コメントのコントローラー:comment

①commentsテーブルにyoutube_urlカラムを追加します。

“`ruby:コマンドプロンプト
rails generate migration AddYoutube_urlToComments youtube_url:string
“`
“`ruby:コマンドプロンプト
rails db:migrate
“`

②commentコントローラーに、コメント内でYoutubeのURLを埋め込むためのコードを書きます。

“`ruby:app/controller/comments_controller.rb
def create
favorite = Favorite.find(params[:favorite_id])
comment = favorite.comments.build(comment_params)

元記事を表示

ruby 練習問題48 (アウトプット用)

以下の仕様にしたがってコードを記述する問題。

・Personクラスはプロパティ name, ageを持っている。
・StudentクラスはPersonクラスを継承している。
・Studentクラスにはintroduceメソッドが定義されている。実行すると
 「私の名前は◯◯です。◯歳です」と表示がされる。
・Studentクラスのインスタンスを作成し、introduceメソッドを実行する。

以下、模範解答
“`ruby
class Person
def initialize(name, age)
@name = name
@age = age
end
end

class Student < Person def introduce puts "私の名前は#{@name}です。#{@age}歳です" end end yamada = Student.new("山田", 20) yamada.introduce ``` 以下、解説 まずクラスの継承について クラスの継承とは、利用したいすべてのクラスを最初から作成することなく、共通する部分を

元記事を表示

2022年の振り返り(KPT)と今年の目標

明けましておめでとうございます。Esper0328です。
昨年は1月から無職で6月半ばにIOTベンチャーに就職して働くという一年でした。
昨年の振り返り(KPT)と今年の目標を書きます。

# 振り返り

## Keep

一言で言うと振返りを継続的にしつつ勉強を1年続けられたのが良かったです。

* KPTを毎週実施したおかげで生活のリズムがとても良くなった
* 前職までは月80H近く残業しており新しいことをやろうという気力が湧かず
* 時間に余裕ができ、少し先のことをやっておこうと思えた
* 意思決定も早くなり、何かトラブルがあっても悪化する前に手を打てていた
* 昨年は計画的に大量に勉強した
* **読んだ専門書の数 7冊**
* [プログラミング言語Go](https://www.maruzen-publishing.co.jp/item/?book_no=295039)
* 練習問題135 問をテスト書いてプログラミングした
* 仕事でテストを書くのが苦にならなかった
* [Distributed Services Wi

元記事を表示

【Rails で論理削除】paranoid | paranoia を使わないで discard gem を使う理由

# 【Rails で論理削除】paranoid | paranoia を使わないで discard gem を使う理由

## 三行まとめ
“`
User.destroy # 物理削除
Comment.destroy # 論理削除
“`
☝️いやみわけつかん?

## 【悪い点】 paranoid | paranoia は rails の関数をオーバーライドする。

モデル側で`acts_as_paranoid`という指定をすると、destroy が論理削除になる。

“`
class Comment < ApplicationRecord acts_as_paranoid end ``` ## paranoid | paranoia のメリデメ ### メリット 物理削除の時と名前が同じなので覚えやすい ### デメリット 論理削除と物理削除のモデルが混在するとバグ埋め込む可能性が上がる たとえば - User.destroy = 物理削除 - Comment.destroy = 論理削除 という風に物理削除と論理削除を使うモデルが混在している場合が問題

元記事を表示

ruby 練習問題47 (アウトプット用)

ある映画のハッシュを定義し、格納されている「title」(タイトル)・「genre」(ジャンル)・「year」(公開年)の三つの要素の中から一つを取り出すプログラムを作成する問題。
**定義する変数**
①movie = {“title” => “ハリーポッター”, “genre” => “ファンタジー”, “year” => “2001年”}

②ユーザーが入力するキーを、getsメソッドを利用し定義しましょう

以下、模範解答
“`ruby
def movie_info(movie, data)
puts movie[data]
end

movie = {“title” => “ハリーポッター”, “genre” => “ファンタジー”, “year” => “2001年”}

puts “以下から一つを選んで入力してください。
・title
・genre
・year”

info = gets.chomp
movie_info(movie, info)
“`
以下、解説
今回はハッシュを引数としてメソッドに渡す練習をしました。
前提として、ハッシュ名[キー名

元記事を表示

OTHERカテゴリの最新記事