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

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

Ruby on Rails 変数params

# はじめに
備忘録です。
Ruby on Rails5 学習レッスン III ・URLからidを取得しようを学習中paramsがわからなかったのでそこら辺の知識をまとめます

# Q変数paramsがなぜハッシュなのか
A、Ruby on Railsにおけるparamsがハッシュとなる理由は、HTTPリクエストに含まれるクライアントからの情報を扱いやすくするためです。

Webアプリケーションでは、ブラウザからのHTTPリクエストには様々な情報が含まれます。例えば、フォームから送信されたデータ、URL内のクエリ文字列、HTTPヘッダーなどがあります。これらの情報を扱うために、Railsではparamsという変数が使われます。

paramsはリクエストから送られてきた情報を取り出すための手段であり、その情報は通常ハッシュ(Hash)として提供されます。なぜなら、HTTPリクエストに含まれるデータはキーと値のペアの形式で渡されることが多いためです。

# 情報を受け取る流れ(ルーティングからコントローラ) 
例えば、以下のようなURLがあり:http://example.com/po

元記事を表示

paizaラーニング解答: ループメニュー1[Ruby]

# ループメニュー1
https://paiza.jp/works/mondai/loop_problems/problem_index?language_uid=ruby

ループ処理は他の問題集を解くために必須となります。
問題も易しいので標準入出力ができるようになったらすぐ取り組んだ方がいいですね。
## STEP: 1 ある数字までの出力 1
“`ruby
(1..10).each do |i|
puts i
end
“`
eachループ
## STEP: 2 ある数字までの出力 2
“`ruby
n = gets.to_i
for i in 1..n
puts i
end
“`
for inループ
## STEP: 3 数字の受け取り 1
“`ruby
a = gets.split.map(&:to_i)
puts a
“`
putsは配列の要素を改行して出力するのでループ処理のように使うことができます。
## STEP: 4 数字の受け取り 2
“`ruby
n = gets.to_i
a = gets.split.map(&:to_i)
a.

元記事を表示

paizaラーニング解答: 条件分岐メニュー[Ruby]

# 条件分岐メニュー
https://paiza.jp/works/mondai/conditions_branch/problem_index?language_uid=ruby
## STEP: 1 単純な条件分岐
“`ruby
s = gets.chomp
puts s == “paiza” ? “YES” : “NO”
“`

## STEP: 2 数値の分岐
“`ruby
n = gets.to_i
puts n <= 100 ? "YES" : "NO" ``` ## STEP: 3 数値演算結果で分岐 ```ruby a, b, c = gets.split.map(&:to_i) puts a * b <= c ? "YES" : "NO" ``` ## STEP: 4 ゼロ以外 ```ruby n = gets.to_i puts n.nonzero? ? "YES" : "NO" ``` ## FINAL問題 0 が含まれていないか判定 ```ruby n = gets.to_i a = n.times.map { gets.to_i } puts a.

元記事を表示

続: 『続: Rubyでかの有名な水の移し替えパズルを解く』(再帰使わない書き方とか諸々)

# はじめに
まさか[「Rubyでかの有名な水の移し替えパズルを解く」](https://qiita.com/jerrywdlee/items/c7bbcbb6c68e37e7ef71)シリーズの続々編まで書けると思いませんでした。

先日[続編の方](https://qiita.com/jerrywdlee/items/35d93bba3224e48da039)で、**深さ優先探索**は再帰で書きましたが、再帰の深さによってパフォーマンスが心配で、連休を乗じてイテレーション(繰り返し処理、ループ)での書き方も投稿いたします。

# 前回までのあらすじ
https://qiita.com/jerrywdlee/items/c7bbcbb6c68e37e7ef71

https://qiita.com/jerrywdlee/items/35d93bba3224e48da039

# 方法
## (単純の)深さ優先探索

“`rb
require “./jug” # 容器クラス
require “./print_result” # 結果印字用メソッド

# 深さ優先探索(イテレーション

元記事を表示

paizaラーニング解答: 配列活用メニュー[Ruby]

# 配列活用メニュー
https://paiza.jp/works/mondai/array_utilization_primer/problem_index?language_uid=ruby

Bランク獲得ストーリーに含まれているメニューなので、やや難しめの立ち位置のようです。
## STEP: 1 指定の要素のカウント
“`ruby
n, k = gets.split.map(&:to_i)
a = []
n.times { a << gets.to_i } puts a.count(k) ``` ## STEP: 2 全ての要素の和 ```ruby n = gets.to_i a = [] n.times { a << gets.to_i } puts a.sum ``` ## STEP: 3 配列の最大値 ```ruby n = gets.to_i a = [] n.times { a << gets.to_i } puts a.max ``` ## STEP: 4 配列の最小値 ```ruby n = gets.to_i a = [] n.times { a <<

元記事を表示

Tips: coc-solargraphを使うときはshellの指定をした方が良いかも

## 初めに
NeovimでRubyのLspを使う方法の一つに、[coc.nvim](https://github.com/neoclide/coc.nvim)と[coc-solargraph](https://github.com/neoclide/coc-solargraph)を使う方法があります。
このライブラリを導入し、READMEの通りに設定を行なっても正しく動作をしなかったため、解決方法をTipsとしてまとめます。

## 問題が起こった環境

– マシン: Mac (M1)
– Ruby: rbenvでv3.2をglobalに指定
– シェル: zsh
– Neovim: v0.9.4

## 起こっていた問題
READMEの通りに設定を行い、いざRubyのファイルを開くと以下のようなエラーがNeovimのコンソールに表示されました。

“`
[coc.nvim]: UnhandledRejection: /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.

元記事を表示

paizaラーニング解答: 配列メニュー[Ruby]

# 配列メニュー
https://paiza.jp/works/mondai/array_primer/problem_index?language_uid=ruby
## STEP: 1 要素数の出力
“`ruby
a = %w[5 1 3 4 5 12 6 8 1 3]
puts a.length
“`
%wで[]内を配列にできます。
## STEP: 2 全要素の出力
“`ruby
puts %w[5 1 3 4 5 12 6 8 1 3]
“`

## STEP: 3 i 番目の出力
“`ruby
a = %w[5 1 3 4 5 12 6 8 1 3]
puts a[3]
“`

## STEP: 4 配列の入力 1
“`ruby
puts %w[8 1 3 3 8 1 1 3 8 8]
“`

## STEP: 5 配列の入力 2
“`ruby
a = gets.split.map(&:to_i)
puts a
“`

## STEP: 6 配列の入力 3
“`ruby
n = gets.to_i
a = gets.split.map(&:to_i)

元記事を表示

入力して配列に入れる

入力して配列に入れるソースコードです

“`Ruby

puts “データの入力個数を入力してください”
num1 = gets
num = num1.to_i
array1 = []
for i in 0…num do
data = gets
array1.push(data)
end

num2 = array1.length
for j in 0…num2 do
puts array1[j]
end
“`

元記事を表示

ユーザーの結合テストコード

### 目的
– ログインについての結合テストコード
### ユーザーログインの結合テストコード
#### exampleを整理
– ログインできる時
– 保存されているユーザーの情報と合致すればログインできる
– トップページに移動する
– トップページにログインページへ遷移するボタンがあることを確認する
– ログインページに遷移する
– 正しいユーザー情報を入力する
– ログインボタンを押す
– トップページへ遷移することを確認する
– カーソルを合わせるとログアウトボタンが表示されることを確認する
– サインアップページへ遷移するボタンやログインページへ遷移するボタンが表示されていないことを確認する
– ログインできない時
– 保存されているユーザーの情報と合致しないとログインできない
– トップページに移動する
– トップページにログインページへ遷移するボタンがあることを確認する
– ログインページへ遷移する
– ユーザー情報を入力する
– ログインボタンを押

元記事を表示

railsAPIをaxiosで叩いた時のエラーの取得について

## はじめに
RailsのAPIからデータを取得する際に、axiosを使用してエラーが発生した場合、レスポンスを取得することができずに困った

## 問題点
Railsでエラーが発生した場合、通常はstatusコードとmessageをレスポンスボディとして返すので取得の仕方を変えないといけなかった

### 例えば

“` ruby
if user.save
render json: { status: 200, data: user }
else
render status: :unprocessable_entity, json:{ messages: user.errors.full_messages }
end
“`
この場合、フロントでaxiosを使用してAPIを呼び出すと、エラーが発生した場合、以下のようなエラーが発生する

“` JavaScript
axios
.post(process.env.API_URL + ‘/api/v1/users/signup’)
.then((res) => {
console.log(res)
}

元記事を表示

rbenv install 3.3.0でerror: something wrong with LDFLAGS=””が出た時の備忘録

# “rbenv install 3.3.0“を実行すると、エラーが生じた。
実行環境: MacOS M2チップ
“`
$ rbenv install 3.3.0

ruby-build: using openssl@3 from homebrew
==> Downloading ruby-3.3.0.tar.gz…
-> curl -q -fL -o ruby-3.3.0.tar.gz https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21.0M 100 21.0M 0 0 21.7M 0 –:–:– –:–:– –:–:– 21.7M
==

元記事を表示

paizaラーニング解答: 文字列処理メニュー[Ruby]

# 文字列処理メニュー
https://paiza.jp/works/mondai/string_primer/problem_index?language_uid=ruby

paizaのスキルチェックや他の問題集でもよく使うメソッドが登場しますので、初心者向けのメニューでした(一部問題を除く)。
## 文字列の出力
“`ruby
puts “paiza”
“`

## 文字列の受け取り
“`ruby
s = gets.chomp
puts s
“`

## i 文字目の出力
“`ruby
s = gets.chomp
i = gets.to_i
puts s[i-1]
“`

## 文字列の条件判定
“`ruby
s = gets.chomp
puts s == “paiza” ? “YES” : “NO”
“`

## 文字列の文字数
“`ruby
s = gets.chomp
puts s.length
“`

## 文字の検索
“`ruby
s = gets.chomp
c = gets.chomp
puts s.index(c) + 1
“`
ind

元記事を表示

ベンチマークのスコアは、常に高ければ高いほど良いのでしょうか?

私の書籍やニュースレターを読まれている方なら、私がパフォーマンスエンジニアリングを支持していることをご存じかもしれません。パフォーマンスエンジニアリングとは、パフォーマンス作業を行う際、要件と制約を前もって明確にし、それらを満たすようにシステムを設計することをいいます。求められるもの以上に良く(もしくは悪く)システムを設計するのではなく、求められる仕様に忠実にシステムを設計するのがエンジニアリングです。求められるよりも 2 倍大きな箱を設計したとしても、顧客の棚にフィットせず、顧客が希望する倍のコストがかかり、構築に規定の倍の時間がかかるとしたら、それは「より良い」箱を設計したことにはなりません。間違った箱を設計しているのです。

あらゆる計算機システムには、性能要件があります。もしそうでなければ、世界が終わりを迎える寸前に仕事を終えるようなシステムですら、要件を満たすことになってしまいます。そのようなシステムにお金を払ってくれる顧客はいないでしょう(もしいたら、ぜひ紹介してください)。

では、性能要件として求められるレイテンシーやスループットを上回るのは、常に良いことと言えるでし

元記事を表示

【Rails】キーワード引数とハッシュの判別

# はじめに
RailsでRubyのコードを触っていたときのある日、今まで触っていたコードのメソッドを見て
あれ?これってずっとハッシュを引数として渡していたと思ってたけどキーワード引数なのでは?という疑問が生じ、その疑問を解消するために色々調べたので記事にしてまとめてみました。

結論を先に書くと
# 結論:Rails側(定義元)でなんとかしてくれてるからハッシュかキーワード引数か気にしなくていい

# 実際にRailsで書いていたコード
以下のコード読みほぐしていく。(turboの説明は省略)
“`ruby:
redirect_to root_url, status: :see_other
# controller内に書いていたredirect

validates :title, presence: true, length: { maximum: 100 }
# model内に書いていたvalidation

link_to ‘削除’, todo_path(todo), data: { turbo_method: :delete , turbo_confirm: ‘本当に

元記事を表示

初心者でもわかるDockerってこんな感じ

# Dockerでの環境構築

## 概要
Dockerを使用して環境を構築する方法と、Docker事態の概要をまとめる

### Dockerとは
軽量で高速なコンテナ型の仮想環境が構築できるもの
=仮装環境技術の一つ

– Dockerの特徴
1. ゲストOSが存在しない
仮想マシン→ホストOSの上にゲストOSを乗せる形で開発などを行う
Docker  →ホストOSの上にDockerコンテナを乗せる形で開発する
     =ゲストOSを使わなくて良いので仮想マシンより軽量になる

1. テスト環境と本番環境を同一にできる
→コンテナ内で作業するため、コンテナをそのまま本番環境で使用できる
 =本番環境に移行した時に起こる予期せぬエラーなどを防止できる
1. 開発環境を共有できる
→コンテナの作成するファイルを共有することでチームで同一の環境で開発できる

—-
※解説(ITエンジニア未経験野方向け)
→プログラミングを使って開発する際に様々な問題が起きるが、製作物ではない問題が起きることがある

例えば、
– OSによる問題
メンバーごとにPCが異なるため、同じソースコードを書

元記事を表示

paizaラーニング解答: 論理演算メニュー[Ruby]

# 論理演算メニュー
https://paiza.jp/works/mondai/logical_operation/problem_index?language_uid=ruby

できるだけシンプルなコードになるよう工夫しました。
## STEP: 1 論理積( AND )の基本
“`ruby
a, b = gets.split.map(&:to_i)
puts a & b
“`

## STEP: 2 論理和( OR )の基本
“`ruby
a, b = gets.split.map(&:to_i)
puts a | b
“`

## STEP: 3 否定( NOT )の基本
“`ruby
a = gets.to_i
puts !a.zero? ? 0 : 1
“`

## STEP: 4 排他的論理和( XOR )の基本
“`ruby
a, b = gets.split.map(&:to_i)
puts a ^ b
“`

## STEP: 5 NAND 演算の基本
“`ruby
a, b = gets.split.map(&:to_i)
puts !(a.n

元記事を表示

Ruby Silver練習問題個人的詰まったやつ

# Rexより
– 次のコードを実行するとどうなりますか
“`ruby
a = [1, 2, 5, 7, 8]
b = [1, 3, 6, 7, 9]
c = nil || a & b | a && a | b
p c
“`
## 考え方
1.左から“||“を評価していく
“||“は左辺が偽(nil,false)の時に“||“の右辺を実行する
2.“&&“を評価する
“&&“は左辺が真の時に“&&“の右辺を実行する
※“a & b | a“をしているがnilやfalseにならないので真
3. “a | b“の結果を出力
“`ruby
# c
[1, 2, 5, 7, 8, 3, 6, 9]
“`

## 使いそうな場面
nilチェックとか
“`ruby
# aがnilの場合は右辺の処理をする
a || ( a = 20 )
# 自己代入で書くと↓(a = a + 1 => a +=1 )
a ||= 20
“`

## 参考

https://qiita.com/oknoamazia/items/cc856a39c93f61a94410

元記事を表示

結合テストコード

結合テストは本当に難しいです・・・
ただ、一個一個分解すると理解できてきました!
復習の備忘録です!

### 結合テストコード
ユーザーがたどる一連の流れを確認する

### System Spec
結合テストコードを記述するための仕組み

### Capybara
System Specを記述するために必要なGem。 標準で導入済み

`rails g rspec:system users`

#### exampleを整理
– ユーザーが新規登録できる時
– 正しい情報を入力すればユーザー新規登録ができてトップページに移動する
– トップページに移動する
– トップページにサインアップページへ遷移するボタンがある
– 新規登録ページに移動する
– サインアップボタンを押すとユーザーモデルのカウントが1上がる
– トップページへ遷移することを確認する
– カーソルを合わせるとログアウトボタンが表示される
– サインアップページへ遷移するボタンや、ログインページへ遷移するボタンが表示されていない 
– ユーザー新規登録で

元記事を表示

投稿アプリのコントローラーの単体テストコード

モデルのテストはよくしていましたが、コントローラーはあまりやっていなかったので
いい復習になりました!

### 目的
– Request Spec の流れを理解
– レスポンスを判定するテストコードを記述

### コントローラーの単体テストコード
#### テストコードを書く方針
あるアクションをリクエストを送った時、想定通りのレスポンスが生成されるかどうか確かめる
### Request Spec
コントローラーのテストコードを書くために特化した手法

`rails g rspec:request tweets`

### tweetsコントローラーindexアクションの単体テストコード
#### exampleを整理
– indexアクションにリクエストすると正常にレスポンスが返ってくる
– indexアクションにリクエストするとレスポンスに投稿済みのツイートのテキストが存在する
– indexアクションにリクエストするとレスポンスに投稿済みのツイートの画像URLが存在する
– indexアクションにリクエストするとレスポンスに投稿検索フォームが存在する

####creat

元記事を表示

paizaラーニング解答: 算術・代入演算メニュー[Ruby]

# 算術・代入演算メニュー
https://paiza.jp/works/mondai/arithmetic_substitution_op/problem_index?language_uid=ruby
## STEP: 1 足し算
“`ruby
puts 1_231 + 5_178
“`

## STEP: 2 引き算・掛け算
“`ruby
a, b = gets.split.map(&:to_i)
puts “#{a – b} #{a * b}”
“`

## STEP: 3 割り算
“`ruby
a = 437_326
b = 9_085
puts “#{a / b} #{a % b}”
“`

## STEP: 4 掛け算 2
“`ruby
a, b, c = gets.split.map(&:to_i)
puts “#{a * a} #{b * b + c * c}”
“`

## STEP: 5 累乗
“`ruby
a, b, c = 202, 134, 107
puts ((a + b) * c) ** 2
“`

## FINAL問題 累乗 2

元記事を表示

OTHERカテゴリの最新記事