Ruby関連のことを調べてみた2022年06月07日

Ruby関連のことを調べてみた2022年06月07日

100日後くらいに個人開発するぞ!day040

## 今日も条件分岐をやってみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/84d5244d-6678-d0a1-ddea-d7195dcd20da.png)

## 今日の学び
### 条件が成り立たない時の処理方法
* ifにelseを組み合わせると「もし〜なら・・・を行う、そうでなければ〇〇を行う」という処理ができる
* ifにelseを組み合わせた定型文
* `if 条件式`
* `       処理`
* `else`
* `       処理`
* `end`

### 条件を追加する方法
* elsifを用いると「もし〜だったら・・・を行う、そうでなくもし〇〇であれば〜を行う、いずれでもなければ・・・を行う」という条件分岐ができる
* ifにelsufを組み合わせた定型文
* `if 条件式1`
* `       処理`
* `elsif 条件式2`
* `       処

元記事を表示

Railsでmigrationかけた後にブランチをチェックアウトしてしまった時の復旧方法

rails db:migrate掛けたことを忘れて、新ブランチにチェックアウトした後
既にテーブルが作成されていることからmigrateができなくなってしまった時の復旧方法

まず、migrateしてしまった時のブランチにチェックアウトします。

そして以下のコマンド
“`zsh
rails db:migrate:status
“`

そうするとこうなっているはず。
“`zsh
Status Migration ID Migration Name
————————————————–
up 20220606000001 Create hoge
up 20220606000002 ********** NO FILE **********
down 20220606000003 Create fuga
“`
********** NO FILE **********
これはmigrate した後にコミットしなかったことで、存在しないファイルがmigrateされて

元記事を表示

【Rails】DBから最新データが取得されていない時の対処法

# 初めに

ポートフォリオのライク機能を作成した際に、`DB`のデータは変更されているのにインスタンスのデータは更新されていなかった。

## 環境

– Rails 6.1.4
– Ruby 2.7.4

## 結論

`SQLキャッシュ`がされていたので、同じ`SQL`を発行した場合キャッシュされたデータ(更新前のデータ)が返ってきた。

# 解決方法

`SQLキャッシュ`は

– 同じクエリが発生すると、データベースへのクエリを実行せずに、キャッシュされた結果を返す
– `SQLキャッシュ`は、アクションの開始時に作成され、アクションの終了時に破棄されるので、アクションの実行中しか保持されない。

なので、`reload`メソッドを利用することでキャッシュを使わずに再取得できます。

“`ruby:like_controller.rb
class LikesController < ApplicationController def create review = Review.find(params[:review_id]) like = Like.

元記事を表示

begin rescue 文

## find
与えられたどのオプションにもマッチする“`「主キー」に対応するオブジェクト“`を取り出せます。
“`
irb> customer = Customer.find(10)
“`
カラム名をつけなくていい。

## find_by
与えられた条件にマッチするレコードのうち“`最初のレコードだけ“`を返します。
“`
irb> Customer.find_by first_name: ‘Lifo’
=> #

irb> Customer.find_by first_name: ‘Jon’
=> nil
“`
カラム名をつける

“`rb
irb(main):001:0> user = User.all
TRANSACTION (0.1ms) BEGIN
User Load (0.4ms) SELECT `users`.* FROM `users`
=>
[# post = Post.

元記事を表示

LocalJumpError: unexpected return

# 結論

– ブロックの中で早期returnを使うな
– ブロックの中で、returnは呼べない

# ブロックとは

– `hoges.each do | hoge | end` や `hoges.each {|hoge| }` のようなもの
– 有名なところだと`map`や`each`などが存在する

参考

https://qiita.com/naotospace/items/3bbef4015c4390182915

# 再現手順

“`ruby
# ブロックの中でreturnを呼び出す

numbers = [1,2,3,4,5]

numbers.each do |num|
return if num % 2 == 0
end

“`

実行すると、以下のエラーが出る

“`
LocalJumpError: unexpected return
“`

# 解決策

– returnを使わずに処理しよう
– 特に早期returnなどで利用する場合はif文で対応しよう
– 例)1-5の値で偶数の値をeven_numbersに入れたい場合

“`ruby

元記事を表示

ArgumentError: wrong number of arguments (given x, expected y)

# このエラーは何?

– 引数で求めている数が本来はy個なのに、x個与えられているよ
– 引数で必須の引数の数を入れてね。

# サンプル

以下のようなコードに対して、

“`ruby

def add(a, b, c)
a + b + c
end

“`

引数が足りないものを呼ぶとエラーになる。

“`

add(1,2)

# => ArgumentError: wrong number of arguments (given 2, expected 3)
“`

# 今回ハマった問題

– メソッドの呼び出し位置によって、引数の数が変わる処理をした際

“`ruby
def add (a, b, c)
a + b + c
end

add(1, 2, 3) => 6 で出力される
add(1, 2) => 3で出力させたいけど、cがないのでArgumentErrorが起こる

“`

– こういう場合は、cが存在しなければ0になるように代入してあげればよい。

“`ruby
def add (a=0, b=0, c=0)
a + b + c

元記事を表示

[初心者用]Railsチュートリアル アプリ作成〜ユーザー登録

## はじめに
Railsチュートリアルを一通り学びポートフォリオ作成に入る前に内容の確認兼、ポートフォリオをチュートリアルの内容を確認しながら作成できるよう大まかにまとめます。

## プロフィール
プログラミング未経験 金融機関勤務 社会人3年目 
web系エンジニア転職のため、2022年3月ごろにProgateを初めて触りweb制作を中心に学習。

## Railsチューリアルの流れ
※ポートフォリオ作成方法にの大まかな流れ関してまとめるため、環境構築やhtml cssの具体的なコード等については省略します。
アプリ名    sample_app
コントローラ名 User
モデル 
|Users|
| —- |
|id|
|name|
|email|
|password_digest|
|remember_digest|

### ・アプリの新規作成とコントローラ、モデル作成
“`rails new sample_app“`をコマンド実行し、もとになるファイルなどを作成
“`rails g controller Users [アクション名]“`を

元記事を表示

Bundler の Platform 一覧 (Mac OS / Linux版)

## はじめに

– Bundler 2.2.x から 適切なプラットフォームを `Gemfile.lock` に記載する必要があった
– すべての環境をすぐに用意、再現できるマシンが複数手元にないため Platform 一覧を作成した
– Mac OS は新しい OS が公開後更新します

## Platform一覧
– Linux, Mac 別に記載します
– 32bit 環境や Windows マシン は手元に無いため省略しています
– 以下に記載する Platform 名を `bundle lock –add-platform ` コマンド実行時に渡すことで、実行環境の追加できます

### Linux

| OS | x84_64 | arm64 |
|:–|:–|:–|
| Linux | x86_64-linux | arm64-linux |

### Mac OS (darwin)
– Mac OS は新しい OS が公開されたら Platform 指定が変更になるため、アップグレード後追記します

| OS | x84_

元記事を表示

100日後くらいに個人開発するぞ!day039

## 今日は条件分岐をやってみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/230b3ef9-a7f6-d619-045d-888a8ae8425e.png)

## 今日の学び

### 条件分岐の方法(if文)
* 条件分岐とはある条件が成り立つときだけある処理を行うようプログラムすること
* if文を用いると「もし〜ならば・・・を行う」という条件分岐が可能になる
* if文の書き方
* `if 条件式`
* `      処理 `
* `end `
* if文の書き方例:scoreが80より大きい場合は「よくできました」というテキストを出力する
* `score = 94`
* `if score > 80`
* `puts “よくできました”`
* `end`

### 真偽値
* 真偽値にはtrueとfalseという2つの値が存在する
* 条件式はが成り立つと「true」、成り立たなけれ

元記事を表示

Rubyの基本

## Rubyの基本
#### Rubyとは?
Rubyは、1995年頃に開発された**オブジェクト指向のスクリプト言語**。

C言語やJavaといったプログラミング言語は、**コンパイラ言語**と呼ばれており、プログラムを実行するために「コンパイル」という手続きを行うことで初めてそのプロジェクトを実行するができる。対して、Rubyのような**スクリプト言語**では、上記のコンパイルという処理が一切不要。そのままプロジェクトを実行することができる。

そのため、コンパイラ言語に比べてRubyはプログラミングを手軽に行えるのが特徴となっている。つまりRubyは、上から下へ書いた内容を実行する手続き型言語ではなく、実体(オブジェクト)を組み立てながら作る、**オブジェクト指向の中でも比較的容易に実装できるプログラミング言語**。

#### Rubyで何をすることが多いのか?
* ユーザー同士の交流ができるSNSサービス開発
* 人と人をつなぐことのできるマッチングサービス開発
* 動画や音楽などの配信サービス開発
* 業務効率化ツールやソフトの開発
* 機会を制御するためのソフト開発

元記事を表示

Ruby on Rails7.0.3 × MySQL8.0 のDocker環境構築

おはよう。:relaxed:
色々あってRuby on Railsに入門するので、環境づくりをしたよ。

## Ruby on Railsって何? :thinking:
Webアプリケーション開発フレームワーク。
特徴的だと思ったのは「最善の開発方法は1つ」という信念のもと設計されているところで、手法を学び、手法に則ることで生産性向上につながるとのこと。

哲学2つ
・Don’t Repeat Yourself: DRY
– 同じ意味や機能を持つ情報を複数に重複しておくことは避けましょうの考え方。
・Convention Over Configuration
– 規約>設定:Rails側で既にWebアプリケーションの「最善の方法」を明確にし、各種設定にもデフォルト値を設定している。アプリケーションが迷走することを避けるために、規約の遵守を推奨しているらしい。

## 今回用意する環境

今回はRailsの現時点最新バージョン7を使用したいので、Rubyも公式推奨の3.0で設定するよ。
Ruby: 3.1
*https://hub.docker.com/_/ruby
Rail

元記事を表示

Ruby コーディングテスト 便利メソッド一覧

※自分用メモ
Rubyによるコーディングテストまたは競技プログラミングにうまく使えそうなメソッド一覧

## Array#combination
“`
a = [1, 2, 3, 4]
a.combination(1).to_a #=> [[1],[2],[3],[4]]
a.combination(3).to_a #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
“`

## Array#product
“`
[1,2,3].product([4,5]) # => [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
[1,2].product([1,2]) # => [[1,1],[1,2],[2,1],[2,2]]
[1,2].product([3,4],[5,6]) # => [[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
“`
## Array#inject or Hash#inject
“`
# 合計を計算する

元記事を表示

DockerでRuby on Railsの環境を構築する際のmysql.cnfのコマンド及びコード理解

## なぜ記事を書こうと思ったか
mysql 用の設定ファイルを作成する際にコマンド及びコードの理解を備忘録として残すため。

## entrypoint.shのコマンド説明
mysql.cnf
“`
[mysqld]
default_authentication_plugin = mysql_native_password
skip-host-cache
skip-name-resolve

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = SET NAMES utf8mb4
skip-character-set-client-handshake

[client]
default-character-set = utf8mb4

[mysqldump]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4
“`

以下にコマンド及びコードの解説を致します。
– `

元記事を表示

Ruby + Victor でSVGお絵描き(簡単な散布図を描いてみた)

Victor は Ruby で SVG 画像を作るための gem です。pure Ruby なので気軽に使えます。


https://github.com/DannyBen/victor

リポジトリの [examples ディレクトリ](https://github.com/DannyBen/victor/tree/master/examples) を見ると雰囲気が分かります。

これを使ってためしに簡単な散布図のようなものを描いてみました。

# できあがり

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234055/f5616253-b1da-62a8-f236-14c8d1d0ecac.png)

ブラウザで表示させてスクリーンショットを撮ったもの。
色付きのグラフも良いものですが、白黒のも渋くて好きです。

# コード

感触がなんとなく分かればOK という程度の試み

元記事を表示

Ruby + Numo::Gnuplot(numo-gnuplot gem)で散布図を描く

@obelisk68 さんに教えてもらったサンプル([ruby_gnuplot の記事のコメント](https://qiita.com/sonota88/items/50609275668fcd7511e4#comment-0890d29e9583e74eba70), [ブログ](https://obelisk.hatenablog.com/entry/2022/05/29/181912))で十分という気もしたのですが、一応自分でも触ってみました。

# 準備

– gnuplot コマンドをインストール
– Ubuntu 18.04 の場合は `sudo apt install gnuplot`
– [Numo::Gnuplot](https://github.com/ruby-numo/numo-gnuplot) をインストール
– `gem install numo-gnuplot`

これだけ。

[Numo::NArray](https://github.com/ruby-numo/numo-narray) は必須ではありません(インストールも不要)。以下は Num

元記事を表示

Ruby と crystal で解く AtCoder ABC254 D

# はじめに
AtCoder さん、ありがとうございます。
# D – Together Square
https://atcoder.jp/contests/abc254/tasks/abc254_d

時々出題される、素数系の問題。
# 愚直な例(失敗)
“`rb
n = gets.to_i
ans = 0
a = []
k = 1
while k <= n a << k * k k += 1 end k = 1 while k <= n a.each do |x| ans += 1 if x >= k && x % k == 0 && x / k <= n end k += 1 end puts ans ``` ```rb while k <= n a.each do |x| ``` ここの二重ループが $O(N^2)$ となってしまいますので、**TLE**となります。 # Integer#prime_division https://docs.ruby-lang.org/ja/latest/method/Integer/i/prime_div

元記事を表示

Railsのアプリケーションの新規作成からページを表示するまでの手順を徹底解説

## 概要
こんにちは。shun198です。
今回はRailsアプリケーションの新規作成からページを表示させるまでの手順を解説したいと思います。

## 前提
rubyのバージョンは2.6.6
Railsのバージョンは6.0.5
linuxの基本的なコマンドは知っている
RailsではじめてWebアプリケーションを作成する
MacOSを使っている(zshを使っている)
ローカル(Mac)上でページを表示します

## アプリケーションの作成からWebページの表示方法
### アプリケーションを作成
ターミナルを開いてRailsのアプリケーションを任意のフォルダ内に移動して作成します。
今回私はqiita_appという名前で作成しますが、アプリケーションの名前は自由に決めてください。
ターミナルで
“`
rails new
“`
と打つと大量のファイルが生成されます。ls -lでリスト化して見てみると以下の通りです
“`
❯ ls -l
-rw-r–r– 1 shun staff 1967 6 4 17:08 Gemfile
-rw-r-

元記事を表示

【Ruby on Rails】migrationファイル change・up/downの使い分けについて

## はじめに
カラムの追加や削除をしたり、テーブル内の情報を変更する際にmigrationファイルを追加して対応することがある。

その時に、基本的な記述として、、、
“`ruby
def change

end
“`
“` ruby
def up

end

def down

end
“`
という2つのパターンがある。

厳密には、ファイル名の付け方(クラス名の付け方?)、“rails g migration <クラス名>“で入力されるクラス名によって、上のどちらのパターンのメソッドでファイルが生成されるらしい。
ただ、このメソッド changeとup/downの違いがいまいちわからなかったのでまとめておく。

間違いがありましたら、コメントいただけますと幸いです。喜んで修正します。

## changeとup/downの違い
違いとしては、“メソッドの中で 使用できる処理“に違いがあるらしい。
Rails公式ドキュメントには以下の処理がchangeメソッドでは使用できるらしい。

現時点では、changeでサポートされているマイグレーション定義は以下のものだけで

元記事を表示

プログラミングと出会って

## はじめに
エンジニアとして就職できたので、これを機に勉強を初めてからエンジニアになるまでのことを書いてみようと思う。
この文章は長いですけど、僕の思いを書いたので是非読んで欲しいなと思います。
10分ほどみなさんの時間を僕に時間をください。

### 自己紹介
年齢:20代前半
学歴:高卒(大学中退)
職歴:正社員の経験なし

## プログラミングを始める前に
まずプログラミングを始めたきっかけを話そうと思います。
当時、資格スクールに通っており、担当の先生に言われるがまま安定した収入とかっこよさに惹かれて公務員を目指しました。
今思えばそれがそもそも良くなかったのかなとも思っています笑
ただ、公務員の勉強は思ったよりもつまらなくて、元々勉強が好きではなかったため、友達とばかり遊んでまともに勉強をしていなかったです。
その結果もちろん受かりませんでした。
担当の先生に,「来年またチャレンジしよ」と言われましたけど、自分はまた勉強しないだろうから同じ結果になるのが分かっていた為、もういいですと言いました。
そこで担当の先生が勧めてくれたのがプログラミングです。

## プログ

元記事を表示

【RSpec】システムテストでcurrent_userが使えないことを解決する

## 記事の対象者

・RSpecのシステムテストでユーザーの情報を渡す方法を知りたい方

## 前提条件

Ruby 2.6.3
Rails 6.1.5

**< gem >**
・capybara
・rspec-rails
・factory_bot_rails
・faker

## 解決方法の手順
結論、この手順で進めると解決することができました!

・rails_helperにDeviseを記述する(include)
・FactoryBotでUserモデルのダミーデータを作る
・システムテスト画面のbeforeでsign_userを記述する

## 私がハマったところ
devise機能のcurrent_userをテストでも使用できる思っておりました。
しかし、エラーが出てしまうため、アドバイスをいただいたところ、下記のことが判明しました。

**current_user はテスト項目が通らない**

ということで、deviseのヘルパーを使用してuser情報を渡す方法がありました。
1つずつ手順を書いていきます。

## rails_helperにDeviseを記述する(incl

元記事を表示

OTHERカテゴリの最新記事