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

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

Ruby 計算プログラムの作成

# 計算プログラムの作成

二桁以上の整数を入力すると、十の位と一の位の数字の足し算、十の位と一の位の数字の掛け算をそれぞれ行います。
最後に2つの結果を足し合わせて出力するプログラムを作成します。

“`ruby
def addition(a, b)
a + b
end

def multiplication(a,b)
a * b
end

def slice_num(num)
tens_place = (num / 10) % 10
ones_place = num % 10
return tens_place, ones_place
end

puts “二桁の整数を入力してください”
input = gets.to_i

X, Y = slice_num(input)
add_result = addition(X, Y)
multiple_result = multiplication(X, Y)

puts “足し算結果と掛け算結果の合計値は#{add_result + multiple_result}です”
“`

## 解説
このプログラムをター

元記事を表示

ransackのselectボックスでenumのi18nを使用する

# はじめに
ransackのselectボックスでenumのi18nを使用する時に記載方法に迷ったのでメモを残します

### 理解していないとハマること
・enumを使用すると、実際にDBに保存されているのは対応づけられたinteger(数値)であること
・ransackはその数値に基づいて検索をかけていること
・selectボックスを検索条件に設定した時のHTML構造を理解すること
(valueの値がenumで設定した名前(文字列)になっていること)
“`“`
### ポイント
“`
Admin.statuses_i18n.invert.map { |key, value| [key, Admin.statuses[value]] }
“`
key・・・enumで設定した名前(文字列)
value・・・enumで対応づけられたinteger(数値)

### 間違えていたこと
ransa

元記事を表示

Ruby if, else問題

# if, else問題

Aさんは普段土日が休みの仕事に就いており、休みの日は遅くまで寝ていたいと考えています。
そこで、Aさんのために「その日が遅くまで寝ていられるかどうか」を判断するプログラムを作成します。

第一引数の値では「平日かどうか」、第二引数の値では「休暇かどうか」をtrueまたはfalseを用いて以下のように表します。
– 条件1:第一引数がtrue(平日である)または、第二引数がtrue(休暇である)の場合はtrueと出力する
– 条件2:第一引数がfalse(平日でない)または、第二引数がtrue(休暇である)の場合はtrueと出力する
– 条件3:第一引数がtrue(平日である)または、第二引数がfalse(休暇でない)の場合はfalseと出力する
– 条件4:第一引数がfalse(平日でない)または、第二引数がfalse(休暇でない)の場合はtrueと出力する

“`:雛形
def sleep_in(is_weekday, is_vacation)
# ここに条件式を実装する
end

# 呼び出し例
sleep_in(false

元記事を表示

Rubyのデバッガ byebugの全コマンド一覧表

こんにちは。toC向けプロダクトのフロントからバックエンド領域の開発を担当している[hideki_okawa](https://twitter.com/hideki_okawa)です。
最近では、バックエンドでRuby on Railsを用いて開発することが多いです。

## なにこれ?

今回は、Rubyのデバッガである [byebug](https://github.com/deivid-rodriguez/byebug) の全コマンド一覧表です。

全コマンドを知るモチベーションとして、デバッガで出来ることを知っておくことは今後の開発を効率よく進めるために重要だと考えたからです。

「道具の使い方を学ぼう」的なことは、かの有名な [達人プログラマー](https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E7%AC%AC2%E7%89%88-%E7%86%9F%E9%81%94%E3%81%AB%E5%90%91%E3%81%91%E3%

元記事を表示

7つのアクション

本日は7つのアクションについて投稿します。

○アクションとは

ユーザー側からリクエストされた内容を実行、処理する事。

使い方
““`
def index
~~
~~
end
““`
こんな感じで使います。

○7つのアクション詳細
———

| アクション名 | 内容 |
|:-:|:-:|
|  index(インデックス)   |     一覧表示する     |
| show(ショー) | 詳細表示する |
| new(ニュー) | 生成する |
| create(クリエイト) | 保存する |
| edit(エディット) | 編集する |
| update(アップデート) | 更新する |
| destroy(デストロイ) | 削除する |

これが7つのアクションです。

使い方をしっかり学んでアプリ作成に生かしていきます!
本日はここまで!ありがとうございました!!

元記事を表示

【議事録】/packs/js/application-xxxxxxx.jsがNot Found(404)になる問題と解決法

# はじめに
– 本記事は、議事録としてまとめたものになります。
– 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
– また記載内容はすべて、正しい内容が記載されているとは限りません。
– 誤った内容を見つけた場合は、ご指摘をお願いいたします。

# この記事は誰向けの記事か?
– AWS(EC2)で稼働させているアプリをSSL化した後、一部機能でエラーが発生して困っている人
– Google検索で「packs/js/application-xxxxxxx.jsがNot Foundになる」と検索しても、解決しない人
– 検証ツール上で、以下のようなエラーが発生している人
![スクリーンショット 2023-02-10 21.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/24ea02df-9ff2-65c6-f418-d675c1a6a481.png)
/packs/js/application-xxxxxxx.js net::ERR_ABORTED 404

元記事を表示

2022年最も見逃せない有用なGemまとめTOP58 (日本語訳)

以下の記事の日本語訳です

58 RoR Gems: Pin To Plane For Developing RoR Application

# 2022年最高のgems
Rubygems.orgの公式レポートでは、2021年に最もダウンロードされたgemsについて言及します。
これにより、ruby on railsの開発者が何を使っているのか、どのrails gemが最も便利なのかわかります。

### Rubyの便利なGemsとその使い勝手
gemを以下のようにいくつかに分類しました。
– Activecord
– View Helper
– Authentication & Authorization
– Debugging
– Testing
– Admin View
– File Upload
– Deployment
– Code Quality
– Payment
など

## Activecord
#### 1. Activecord Import
ActiveRecord-importを使用すると、大量のレコードを簡単に挿入することができます。ActiveRe

元記事を表示

【devise_token_auth】rack (2.2.4) lib/rack/utils.rb:464:in `[]=’の解決方法

症状

device_token_authを使って認証機能を実装しようとしたところ、以下が表示されました。

翻訳すると、「nil:NilClass の未定義メソッド」でした。

“`terminal:error
NoMethodError (undefined method `downcase’ for nil:NilClass):
rack (2.2.4) lib/rack/utils.rb:464:in `[]=’
rack (2.2.4) lib/rack/utils.rb:432:in `block in initialize’
rack (2.2.4) lib/rack/utils.rb:432:in `each’
rack (2.2.4) lib/rack/utils.rb:432:in `initialize’
rack (2.2.4) lib/rack/utils.rb:425:in `new’
rack (2.2.4) lib/rack/utils.rb:425:in `[]’
rack (2.2.4) lib/rack/etag.rb:29:

元記事を表示

【Ruby】ルーティングのネストを作成する方法

# 前提条件
– Ruby 3.1.0

# やりたいこと
ユーザメニューページの配下にMicropostのリソースを配置させたい。
▼パスのイメージ
`/user/1/micropost/1`
`/user/1/micropost/new`
`/user/1/micropost/edit`
etc…

# 方法
### ルーティングをネストにする
“` ruby:config/route.rb
resources :users do
resources :microposts
end
“`
上記のように記述することで以下のルーティングが使用できるようになる。

|Prefix|Verb|URI Pattern |Controller#Action|
|:————-|——-|—————————————-|————–|
|user_micoroposts |GET |/users/:user_id/micoroposts(.:format) | micor

元記事を表示

Rubyで二分探索する

配列に含まれる要素を検索する際に、対象の配列がソート済みの場合は二分探索(バイナリサーチ)を用いると高速に検索できます。

Rubyには配列の二分探索を行うメソッドとして`Array#bsearch`、`Array#bsearch_index`が用意されているので、わざわざ自前で二分探索を実装する必要がありません。

今回はこの二分探索の使い方とベンチマーク比較を紹介します。

## `Array#bsearch`の使い方

はじめに`Array#bsearch`についてです。
このメソッドはブロックの評価結果で条件を満たす値を二分探索で検索しその値を返します。

https://docs.ruby-lang.org/ja/latest/method/Array/i/bsearch.html

以下はソートされた配列から4より大きい数字を取得する例です。

“`ruby
ary = [1, 3, 5, 7, 11]
puts ary.bsearch{|a| a > 4}
# 5が出力される
“`

## `Array#bsearch_index`の使い方

次は`Array#bse

元記事を表示

【Ruby】例外処理を追加する方法

# 前提条件
– Ruby 3.1.0

# やりたいこと
作成した機能に例外処理を追加したい。

# 方法
### begin – rescueを使う
“` ruby
begin
# 普通の処理
rescue => e
# 例外時の処理
end
“`
# 補足
– beginを省略することができる。
“` ruby:
def foo
# 普通の処理
rescue => e
# 例外時の処理
end
“`
– 例外クラスを指定することができる。
“` ruby:
def foo
# 普通の処理
rescue <例外クラス名> => e
# 例外時の処理
end
“`
※例外クラスは下記参照
https://docs.ruby-lang.org/ja/2.1.0/library/_builtin.html

# 参考

https://qiita.com/sue738/items/d0d6ca135c4546222159

https://qiita.com/murata0705/items/6ae346bd04197fb2e36a

元記事を表示

Ruby include?メソッドを使ってプログラムを作成する

# include?メソッド
include?メソッドについては以前の投稿で書きました。

https://qiita.com/ta–i/items/3a7004d890bccf7ad2c1

今回include?メソッドをもう一度調べているときに、大文字小文字を区別せずに検索する方法があることを知りました。

例:大文字小文字を区別せずに検索する
“`ruby
string = “Hello World”
puts string.downcase.include?(“hello world”)
“`
“`ruby
true
# ターミナル出力
“`
downcaseメソッドは、大文字を小文字に変換します。
今回は小文字に変換して、(“hello world”)を検索したという流れです。

# include?メソッドを使って、特定の数字が含まれているかをチェックするプログラムを作成
下記条件です。
– 条件1:配列内に1,2,3が全て入っている場合は、「True」と出力すること
– 条件2:配列内に1,2,3の全てが入っていない場合は、「False」と出力すること

`

元記事を表示

AbstractController::DoubleRenderError

# はじめに
フリマアプリを実装中のエラーです。
ログイン状態、ログアウト状態で遷移できるページを変更したい実装中に
`AbstractController::DoubleRenderError`のデバックを記載しています。
URLは直打ちで入力する事とします!

実装したいこと
* ログイン状態でも自身が出品していない編集ページへ遷移しようとするとトップページに遷移する。
* ログアウト状態で商品編集ページに遷移しようとするとログインページに遷移する。

以上の2点を実装しようとしています。

# エラーまでの経緯 ~コード紹介~

~~~ruby items_controller.rb
def edit
redirect_to new_user_session_path unless user_signed_in?
if current_user.id != @item.user_id
redirect_to root_path
end
end
~~~

以上の実装で
~~~
AbstractController::DoubleRenderErr

元記事を表示

【Ruby on Rails】enum の日本語化は gem なしで実現できる

# はじめに

こんにちは、 [FarStep](https://twitter.com/8SKeEdvtHfOcczY) です。
Rails でアプリケーションを作成していると enum の値を日本語化する場面があると思います。
そんなとき [enum_help](https://github.com/zmbacker/enum_help) を導入していませんか?

もちろん enum_help を用いた enum の日本語化も間違った実装ではありません。
しかし、アプリケーションにインストールする gem は少ないに越したことはありません。
なぜなら、

– gem が多いとアプリケーションの保守が大変になる(Rails との依存関係等)
– gem はメンテナンスがいつ終わるか分からない

といった理由があるからです。

そこで本記事では **gem を使わずに** enum の値を日本語化する方法を紹介します。
それでは、始めましょう ?

# 環境

最初に、動作確認を行う環境について説明します。
Ruby と Ruby on Rails のバージョンは下記の通りです。

元記事を表示

Ruby even?メソッド

# even?メソッド
対象の数値が「偶数」かどうかを判断するメソッド。
対象の要素の値が偶数であれば真を返し、そうでない場合は偽を返します。
これはRubyが元々用意しているメソッドです。

下記URLはeven?メソッドの公式リファレンスです。
https://docs.ruby-lang.org/ja/latest/method/Integer/i/even=3f.html

例1
“`ruby
puts 10.even?
“`
“`ruby
true
# ターミナルの返し
“`
例2
“`ruby
puts 5.even?
“`
“`ruby
false
# ターミナルの返し
“`

# even?メソッドを使って偶数血の取得をするプログラムを作成します
配列にある値の中から偶数の数をカウントして出力するメソッドを作ります。

出力例:
“`ruby
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([2, 2, 0]) → 3
count_evens([1, 3, 5]) → 0
“`

“`ruby
def c

元記事を表示

Rackの脆弱性対応を! (CVE-2022-44570,CVE-2022-44571,CVE-2022-44572)

2023年1月18日にRuby on Railsの脆弱性[^1]とは別にRackの脆弱性が公表されました。

https://discuss.rubyonrails.org/t/cve-2022-44570-possible-denial-of-service-vulnerability-in-racks-range-header-parsing/82125

https://discuss.rubyonrails.org/t/cve-2022-44571-possible-denial-of-service-vulnerability-in-rack-content-disposition-parsing/82126

https://discuss.rubyonrails.org/t/cve-2022-44572-possible-denial-of-service-vulnerability-in-racks-rfc2183-boundary-parsing/82124

どれもReDoSの問題であり、CVE-2022-44571とCVE-2022-44572は以下の特徴により危

元記事を表示

【Ruby】複数の配列を結合しハッシュのネストに追加する方法

# 前提条件
– Ruby 3.1.0
# やりたいこと
下記データを結合し、ハッシュのネストに追加したい。
“` ruby:
@fruits = [[‘りんご’,’赤’,’丸い’],[‘メロン’,’緑’,’丸い’],[‘バナナ’,’黄’,’細長い’],…]
@vegetables = [[‘大根’,’白’,’細長い’],[‘トマト’,’赤’,’丸い’],[‘キャベツ’,’緑’,’丸い’],…]
“`

# 方法
### 1. ハッシュのネストを作成する
“` ruby:実装
# ハッシュのネストを作成する
hash = Hash.new {|h1, k1|
h1[k1] = Hash.new {|h2, k2|
h2[k2] = []
}
}
“`
### 2. ハッシュのネストにデータを投入する
“` ruby:実装
@fruits.each do |fruit|
# 変数を定義する
fruit_color = fruit[1]
fruit_shape = fruit[2]

@vegetables.each do |vege|

元記事を表示

【Ruby】2次元配列にソートをかける方法

# 前提条件
– Ruby 3.1.0
# やりたいこと
下記2次元配列の子要素の1番要素を昇順でソートしたい。
“`
array = [
[0,5],
[1,4],
[2,3],
[3,2],
[4,1],
[5,0]
]
“`

# 方法
### sort_byメソッドを使う
“` ruby:実装
# xの引数にソートをかけたい要素を指定
array = array.sort_by {|x| x[1]}
“`
“` : 結果
array = [
[5,0],
[4,1],
[3,2],
[2,3],
[1,4],
[0,5],
]
“`

# 参考

https://qiita.com/takanatsu/items/39cf827aadc7d06bf48c

元記事を表示

②ストロングパラメーターについて

本日はストロングパラメーターについて投稿します。

○ストロングパラメーターとは

Ruby on rilsのアプリケーションにおいて不正なデータを取得しないように指定する
アプリ内の警備員みたいなもの。(例えが間違っていたらすいません。。):sweat_smile:

ストロングパラメーターを使う為には2つのメソッドを使用します。

①require(リクワイア)メソッド

送信されたパラメーターの情報を持つparamsが使用出来るメソッドの事。
パラメーターからどの情報を取得するか選択する事が出来る。
使い方
““`
paras.require(:モデル名)
““`

さらに指定したパラーメーターをより限定した時に使うのがpermitメソッドです。

②parmitメソッド

requieメソッドと同じでparamsが使用出来るメソッド。
取得したいキーを指定出来て、その中の値のセットのみ取得出来る。
使い方
““`
params.require(:モデル名).parmit(キー名)
““`

まだ僕自身ざっくりな理解ですが日々アウト

元記事を表示

【Ruby】配列にランダムな値を追加する方法

# 前提条件
– Ruby 3.1.0

# 背景
未完成のDBやスプレッドシートなどからデータを配列に格納する際、不足しているカラム値を追加する必要がある。
そこで不足しているカラム値にランダムな値を仮置きする。

# やりたいこと
配列にランダムな値を追加したい。

# 方法
### randメソッドを使う
“` ruby:実装
# 配列を用意する
array = [‘0′,’1′,’2′,’3′,’4’]
# 配列の5番要素に「0以上10未満の整数」を格納する
array[5] = rand(10).to_s
“`
配列の5番要素にランダム値「8」が格納された。
“` :結果
> [‘0′,’1′,’2′,’3′,’4′,’8’]
“`

# 参考

https://pikawaka.com/ruby/rand

元記事を表示

OTHERカテゴリの最新記事