Ruby関連のことを調べてみた2021年09月19日

Ruby関連のことを調べてみた2021年09月19日
目次

【Ruby on Rails】頻出しそうなFormHelperをまとめる

#対象者

* form_with, form_forを使っている方へ

#目的

* FormHelperにどんな種類があるか把握して、引き出しを増やすこと

#実際の手順と実例
###1. 前提

form_withの基本構文は下記の通りです。

https://qiita.com/nao0725/items/e5685d4851d8329d9e73

###2. よく使用するFromHelper一覧

| 1 | 2 |
|:-:|:-:|
| check_box | チェックボックスタグを生成 |
| file_field | ファイルアップロード用のタグ生成 |
| hidden_field | 特定の属性にアクセスするための、隠されたinputタグを返す |
| label | フォームに属した名前(ラベル)を返す|
| password_field | パスワードのためのタグ生成 |
| radio_button | ラジオボタンをタグを生成|
| text_area|長文用テキストを生成|
| text_field | 短文用のテキ

元記事を表示

Ruby Kaigi Takeout 2021に参加した

#概要
[Ruby Kaigi Takeout 2021](https://rubykaigi.org/2021-takeout)に参加しました。
今回は、9月9日〜9月11日の三日間開催です。

配信内容はRubyKaigi 公式チャンネルにて現在閲覧することが可能です。
https://www.youtube.com/channel/UCBSg5zH-VFJ42BGQFk4VH2A

# PRK Firmware: Keyboard is Essentially Ruby / Hitoshi HASUMI
特に印象深い[こちらのセッション](https://youtu.be/5unMW_BAd4A)について感想を書きます。
セッションで言及されている DIYキーボードは実質Ruby という角谷さんのLTは[こちら](https

元記事を表示

RubyKaigi Takeout 2021 参加レポート

「RubyKaigi Takeout 2021」に初参加したので、そのレポートを簡単に書きました!
私の経歴ですが、Javaを5年近く経験した後、Ruby on Railsでの開発を1年半ほど経験、という流れです。

https://rubykaigi.org/2021-takeout/schedule#day1

# Day1

## TypeProf for IDE: Enrich Dev-Experience without Annotations

– RBS
– Rubyの型を定義するための公式言語
– TypeProf/Steep/Sorbet
– 静的型解析ツール
– TypeProfとはRubyコードを型レベルで実行する
– TypeProfの弱点としては解析に時間がかかる
– require先のライブラリも解析しに行くのが主な原因
– TypeProf for IDEは1秒以上かかる解析は打ち切るという割り切った設計にした
– TypeProfを高速化するにはgemのRBSを書く必要があ

元記事を表示

byebug ユーザ(staff)モデルのテスト作成のエラー

ユーザ(staff)モデルのテスト作成のエラー

学び:どうしてエラーなのかが全然わからない….byebugを使う

“`ruby:
Failures:

1) Staff バリテーション name,email値が設定されていれば、OK
Failure/Error: expect(@staff.valid?).to eq(true)

expected: true
got: false

(compared using ==)

Diff:
@@ -1 +1 @@
-true
+false

# ./spec/models/staff_spec.rb:15:in `block (3 levels) in

Finished in 0.38805 seconds (files took 2.01 seconds to load)
4 exa

元記事を表示

Paiza スキルチェックで必要な基礎知識をまとめてみた

#記事内容
Rubyの基礎を学ぶため、以前から気になっていたPaizaでRuby入門を学習。
その後、学んだ知識を試すべくスキルチェック問題に挑戦したときに感じた最低限必要な知識をまとめてみました!

#前提
言語:Ruby

##標準入力・出力について
まず最初に立ちはだかる**標準入力**についてご説明します。

**標準入力**とは、シンプルに言うと`値を受け取る`ことです。
**標準出力**とは、`受け取った値を画面に出力する`ことでです。

**ruby**では`getsメソッド`を使用することで、入力された要素を受け取ることができます。

“`ruby
foo # 入力された要素

line = gets # 入力された要素を受け取り、line変数に格納
puts line

出力結果
foo
“`

上記のプログラムでは、入力された要素をgetsメソッドで受け取り、受け取った要素をputsメソッドで出力しています。

**スキルチェック**では**予め入力されている要素**を`getsメソッド`で受け取っていく形になり、その要素をもとに問題を解ていきます。

また、

元記事を表示

Railsのroutesでネストさせる3つの方法

[1.はじめに](#1-はじめに)
[2.Railsのroutesにおける、namespace, scope, module](#2-内容い)
[3.まとめ](#3-内容ろ)

#1. はじめに
stack overflowで親切な人がネストの仕方を教えてくれたのでまとめます。
namespace以外でネストさせる方法を知らなかったので勉強になりました。
#2. Railsのroutesにおける、namespace, scope, module
**namespace**

“`Ruby
Rails.application.routes.draw do
namespace :admin do
resources :movies
end
end

“`
URLを“`admin/movies“`に変更したい。
同じくファイル構成も“`admin/moviesにしたい“`
(よくaoiモードでやるやつ“`api/v1/movies“`)

**scope**

“`Ruby
Rails.application.routes.draw do
scope

元記事を表示

【Ruby】RubyでCSV形式のデータを読みこみや書きこみをしたい時

# 概要
Rubyでcsvファイルを読み込んで新たに書き出せるようにしたかった。
Gemを利用しても実装できるが、あえてRubyのみで実装した。

# 手順
## 1.テストデータの取得
テスト用に郵便番号データの「東京」のcsvファイルでテストします。

### ◇郵便番号データ
https://www.post.japanpost.jp/zipcode/download.html

## 2.使用するライブラリ
CSV形式ファイルを使うには、標準ライブラリcsvを利用するのが便利です。
◇csvライブラリ
https://docs.ruby-lang.org/ja/latest/library/csv.html

今回、使用する`13TOKYO.csv`はShift-JISでエンコードされているため、その後の処理で不都合があるかもしれないので、`Shift-JIS`から`UTF-8`に変更します。
◇kconvライブラリ
https://docs.ruby-lang.org/ja/latest/library/kconv.html

## csvファイルを読み込んで別のcsvファイ

元記事を表示

rails6で、Stripe Connectでプラットフォームでオンライン決済の導入方法

###今回初めて投稿することになったきっかけ
stripeに日本語の情報が少なかったので、少しでも誰かの役に立てばと思いシェアさせていただきます。
間違っている箇所・改良点などあれば教えていただければ幸いです。

###Stripeとは

オンライン決済(今回はクレカ)を提供しているグローバル企業

インターネット向け決済インフラ
スタートアップから大規模企業まで、あらゆる規模の多数の企業が Stripe ソフトウェアと API を使用して支払いを受け付け、入金し、オンラインでビジネスを管理しています。
Stripe はサンフランシスコとダブリンに本社を置き、ロンドン、パリ、シンガポール、東京などにオフィスを開設しています。
[Stripe公式サイト(日本語)](https://stripe.com/jp)

####サポート
日本語のサポートは、メール(24h以内の返信)のみ。現在電話サポートはなし
英語でならチャットサポートがある
※[Stripe公式API](https://stripe.com/docs

元記事を表示

[Ruby] AtCoder過去問 B – Trained?

##はじめに
AtCoderの過去問B問題をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください↓

https://atcoder.jp/contests/abc065/custom_test

##B – Trained?
問題のシチュエーションに理解が苦しみましたが、、、w

とりあえず入力を受け取ります。

“`ruby
n = gets.to_i
a = readlines.map(&:to_i)
“`

続いて、答えとなる変数countと、光っているボタンを表す変数on_btnを用意します(変数の名前をつけるのが本当に苦手です)

はじめに光っているボタンは必ずボタン1なのでon_btnには1を代入しておきます

“`ruby
n = gets.to_i
a = readlines.map(&:to_i)

on_btn = 1
count = 0
“`

on_btnが2になったら処理を終了させるwhile文を書きます。
実際に配列aで光っているボタンを表すときは“`a[on_btn-1]“`となります。
添字(インデックス数

元記事を表示

N+1問題について!

N+1問題とは、、、?

初心者ならではの視点でわかりやすく書いていきたいと思います!

# ①.N+1問題の意味!

N+1問題とは、アソシエーションを利用した場合に限り!!

データベースへのアクセス回数が多くなってしまうと言う問題です!

これはアプリケーションのパフォーマンス低下に繋がります。。。

例えば!通常、コントローラーで  mail.allなどでデータを取得する際は、1度のアクセスで済みます!

しかし例のような、メールが複数存在する一覧画面に、それぞれユーザー名を表示するケースを考えてみます!

この場合、mailsに関連するusersの情報の取得に、メール数と同じ回数のアクセスが必要になってしまいます!

もしも1億メールあれば、1億回以上アクセスすることになり、アプリケーションのパフォーマンスが著しく下がることになるということです!

これを解決するために、includesメソッドを利用します!

# ②.includesメソッドの使用方法!

includesメソッドは、引数で指定された関連モデルを1度のアクセスでまとめて取得してくれます!

記述は、inc

元記事を表示

Rubyで時間の差(HH:MM:SS)を計算する

時間の差をHH:MM:SSとして欲しい時に、変換する際にJSTとして+9:00されてしまって困ったので備忘録

こんな感じ↓
6時間10分ー4時間=11時間10分(JST)+9:00

足し算引き算はunixtimeで数字として行う(これは他に記事いっぱいあるのでそっち見て)

“`ruby
# 時間の差を見たいので引き算
diff = Time.zone.at(unix_base_time) – Time.zone.at(something_unix_time)
p diff.class # FloatとかActiveSupport::TimeWithZoneならいけることを確認した
p Time.zone.at(diff).strftime(‘%H:%M:%S’) # “09:10:00”
p Time.zone.at(diff).utc.strftime(‘%H:%M:%S’) # “02:10:00”
“`

元記事を表示

?インターネット老人?のためのホームページ(死語)リフォーム術

# この記事の対象
~00年代初頭にホームページ作っていて、現在放置中……という人、あるいはそういう人から依頼されて昔のフォルダを受け取った人が対象になります。
スキル的にはjQuery(Bootstrap)なら何とか勢~(バックにも関心がある)SPA初心者勢を想定しています。

# 手順
## 1.本当に自前でやる必要があるか考える
Webサービスが氾濫する現在、現在サイトにある機能を本当に自前で提供する必要があるか考えましょう。

### 日記
まぁ**最有力はブログへの移行**ですね。黒歴史を消す人も多いですが、逆に過去の日記みたいなもんで、残しておきたいと思う人もいるかと思います。ていうかホームページは放置してて日記にあたる部分だけ流石にブログに移行してる人も多いかと思いますね。
何らかの理由でブログに移行できない、不適切だと思う場合はスクレイピングして文章データをmdやらjsonに纏めて、今流行りのGatsbyあたりに手を出すのも良いのではないでしょうか。

### イラスト
これは現行のシェアとしてもシステム的にも**[pixiv](https://www.pixiv.ne

元記事を表示

[Ruby] AtCoder過去問 B – Nice Shopping

##はじめに
AtCoder過去問B問題をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください↓

https://atcoder.jp/contests/hitachi2020/tasks/hitachi2020_b

##B – Nice Shopping
はじめに入力を受け取ります。
今回は少し面倒でした。

“`ruby
a, b, m = gets.split.map(&:to_i)
a_ary = gets.split.map(&:to_i)
b_ary = gets.split.map(&:to_i)
m_ary = []
m.times do |i|
m_ary << gets.split.map(&:to_i) end ``` 割引券の配列m_aryの中は配列の中に配列を入れています。m_aryの中のそれぞれの配列が割引券一枚の条件を示しています。 割引券を使わずとも一番安い組み合わせが存在する可能性がありますので、price_aryという配列を作って代入しておきます。 ```ruby a, b, m = gets.sp

元記事を表示

fakerを使って投稿に対してのダミーコメントを作ってみた

現在投稿系のアプリを作成しており、1投稿に対してコメントを複数つけるようにしました。
そこでコメントが少ない場合なら良いのですが増えてきたときにコメントを見るために下までスクロールしないといけなくなります。
自分がユーザーでも面倒くさいので他の方法を考えました。

2つ考えてみました

1つ目の方法は
(クリックしてコメントを表示)みたいなボタンを作ってボタンがクリックされたら表示する。という動作です
これはjavascriptを使って実装できると思いました。
普段は@commentを(display:none)で消しておいて、onclickでshowさせるみたいにできるはずです。

以下のサイトが参考になると思います。

https://into-the-program.com/display-block-none/

2つ目の方法は
gem ‘kaminari’ を実装して、設定した数だけ表示して他の要素はページを切り替えることで見れるようにすることです

↓こんな感じ

![スクリーンショット 2021-09-17 17.38.22.png](https://qi

元記事を表示

extend Activesupport::Concernについて

concernsに定義するモジュールでよく書かれているがいまいち何をしているのかよくわかっていなかったので調べました。

### 結論
単純に言えば、`モジュールでのクラスメソッドの定義やそれをincludeする側でクラスメソッドとして追加する方法、クラスレベルでのメソッド呼び出しの容易な方法を提供してくれるもの`だと理解しました。

### 具体例
具体例は以下のページと同じものです。
https://api.rubyonrails.org/v6.1.4/classes/ActiveSupport/Concern.html

例えば、モジュールがincludeされたときに特定の処理を呼び出したり、モジュールのメソッドをクラスメソッドとして追加したい時、通常以下のように書きます。

“`ruby
module M
# https://docs.ruby-lang.org/ja/latest/method/Module/i/included.html
def self.included(mod)
# includeする側(例えばクラス)の特異メソッドとしてClassM

元記事を表示

要素の最後を求める時

◼️ famiry = [“suzuki”, “takurou”, “gou”,・・・・ “qiita”]
例えば上記の様な配列があったとする。最後の要素だけを取り出す時、suzuki 君から順に最後まで数えてqiita君の順番が98番だった時、puts famiry[98] と書き出力するのはそごくめんどくさい。

◼️ こんな時、こんな問題を解決するのが [配列の要素数 -1]を使うこと。
書き方: famiry[famiry.lenght -1 ]
     puts famiry

上記の様な書き方を行うことで全体の要素数から最後の値ふだけを出力できる。そして、数えるみたいなめんどいことはやらなくておくなる。

今日の投稿は以上です。

wagaでした!

元記事を表示

エラー:No route matches [GET] “/new_user_session_path”

##環境
MacOS BigSur Ver11.5.2
Ruby 3.0.2
Rails 6.1.4.1

##状況
Railsアプリを実装中、下記のエラー発生

“`
No route matches [GET] “/new_user_session_path”
“`

一見問題なさそう

“`app/views/layouts/_header.html.slim
li
= link_to ‘ログイン’, ‘new_user_session_path’
“`

pathを確認したけど間違ってない

“`
$ rails routes

new_user_password_path GET /users/password/new(.:format) devise/passwords#new

“`

##解決方法
#####原因:pathを””で囲っていた…
初歩的なミスすぎて自分で自分に引きました

“`app/views/layouts/_header.html.slim
li
= link_to ‘ログイン’, new_user_session

元記事を表示

Ruby on Ralis でデータベースにあるテーブルの中身を指定して取得してviewに表示する方法

データベースのテーブルの中身を指定して取得。

テーブル名:lists
カラム名:title

“`
def index
@lists = List.find_by(title:”リスト”)
@lists_number = List.find_by(number:46)
end
“`
あとはviewに記述すれば表示されます。

“`
<%= @lists.title %>
<%= @lists_number.title %>
“`

元記事を表示

エラー:Could not find ‘spring’ (= 2.1.1) among 167 total gem(s) (Gem::MissingSpecError)

##環境
MacOS BigSur Ver11.5.2
Ruby 3.0.2
Rails 6.1.4.1

##状況
RailsアプリをHerokuへデプロイした際に下記のエラーが発生

“`
Could not find ‘spring’ (= 2.1.1) among 167 total gem(s) (Gem::MissingSpecError)
“`

##原因
どうやらこのgemが悪さをしているらしい

“`ruby:Gemfile
group :development do
(略)
gem ‘spring’
gem ‘spring-commands-rspec’
end
“`

##疑問点
developmentだけのgemなのになぜデプロイ時にエラーが出るのか謎

##解決策
この2つのgemをコメントアウト

“`ruby:Gemfile
group :development do
(略)
# gem ‘spring’
# gem ‘spring-commands-rspec’
end
“`

bundle installも忘れずに!

元記事を表示

結合テストを書いていく①

#はじめに
単体テストコードはフリマアプリ作成時にしっかり書いたのですが、結合テストは書いていなかったのでオリジナルアプリでは書いていきたいと思います。

その中で学習したことをアウトプットとして投稿させて頂きます。

#単体テストと結合テストの違い(単体テストの場合)

単体テストは機能ごとにテストを行います。

例えばuserの単体テストコードの場合

“`ruby:user_rspec.rb
describe ‘ユーザー新規登録’ do
context ‘登録できるとき’ do
it ‘nickname,email,password,company_name,profession_idが存在する場合は登録ができる’ do
end
end
context ‘登録ができないとき’ do
end
end
“`

モデルやコントローラーの機能ごとに問題がないかバリデーションの挙動を確認します。

# 単体テストと結合テストの違い(結合テストの場合)
結合テストの場合はユーザーがアプリを使用する一連の流れを確認するものになります。

ホー

元記事を表示

OTHERカテゴリの最新記事