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

Ruby関連のことを調べてみた2022年05月31日
目次

railsのform_withにおけるselectメソッドの初期値設定方法

## 概要

form_withにおけるselectメソッドの初期値の設定方法が地味に迷ったのでまとめます。

## 初期値設定方法について

初期値設定方法は大きく2つあります。

### options_for_selectを使う方法

“`ruby
# bが選択される
= f.select :hoge, options_for_select([“a”,”b”,”c”], selected: “b”)
“`

### options_for_select を使わない方法
“`ruby
# bが選択される
= f.select :hoge, [“a”,”b”,”c”], { selected: “b” }
“`

## 注意点

### 失敗例

これだと失敗する。

“`ruby
# aが選択される
= f.select :hoge, [[“a”, 1],[“b”, 2],[“c”, 3]], { selected: “b” }
“`

### 解決策

選択肢が二次元配列で渡されている場合(1つの選択肢が複数の要素を持っている場合)、最初の要素がページ上に出力され、最

元記事を表示

Ruby と crystal で解く AtCoder ABC253 C

# はじめに
AtCoder さん、ありがとうございます。
# C – Max – Min Query
https://atcoder.jp/contests/abc253/tasks/abc253_c

出題の趣旨として、配列の`Max`や`Min`(や`Sort`等)は毎回計算するとコストがかかるので、`TLE`を避ける工夫が必要です。
# Hash + メモ
## Ruby
“`rb
q = gets.to_i
h = Hash.new(0)
h_max = -1
h_min = 1000000001
q.times do
s = gets.chomp
case s[0]
when ‘1’
x = s.split[1].to_i
h[x] += 1
h_max = x if h_max < x h_min = x if h_min > x
when ‘2’
_, x, c = s.split.map(&:to_i)
x = s.split[1].to_i
if h[x] > c
h[x] -=

元記事を表示

rubyの配列で、同じ値の個数を数える

group_byメソッドで、同じ値のグループを作成し、
`key value`形式で、mapメソッドの中で、
集計する。
最後に`to_h`で見やすく出来る

“`rb
ary = [1, 1, 1, 2, 3, 3]

p ary.group_by(&:itself).map{ |key,value| [key, value.count] }.to_h

=> {1=>3, 2=>1, 3=>2}
“`

これだと見にくい
![スクリーンショット 2022-05-31 8.55.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492674/049361c8-f637-4f63-1a71-466a1bc27704.png)

参考

Rubyで配列内の重複する要素を数える方法【初心者向け】

`group_by`
こんな感じで、デフォルトではハッシュが作成される。

“`rb
ary = [1, 1, 1, 2, 3, 3]

p ary.group_by(&:itself)

元記事を表示

Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.を解決する話。(Mac railsコマンド等で出る)

# Calling `DidYouMean::SPELL_CHECKERS.merge!…が出た!
railsコマンドやbundleコマンドを実行すると、掲題のエラーが出る。
特にそれによって何かが使えないというわけではないが、エラー内容にある通り非推奨みたいだし、毎回これが出るのは不愉快なので、消したい思う!

# bundlerのバージョンを変えよう!

https://github.com/rubygems/rubygems/issues/5234

上記の記事によると、bundlerのバージョンをアップデートすればOKみたい。
さっそくやっていく!

“`
$ bundle -v
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
Bundler version 2.2.17
$ bun

元記事を表示

【Rails6】Action Mailer お問い合わせメールを自分のGmailに送信させる方法

## 実現したいこと
この記事では、以下のような、よく見る問い合わせフォームを使ってユーザーから問い合わせがあったときに、特定のGmailに問い合わせメールが届くようにするための方法を紹介しています。

![お問い合わせフォーム 2022-05-30 21.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/1a216619-d6aa-1f9d-d844-973de54177f4.png)

## 実装環境
ruby 2.6.6
Rails 6.0.3.6

## 手順
## ①Googleアカウントでアプリパスワードを発行する。
⚠アプリパスワードを発行するアカウントは、問い合わせメールを受け取りたいGmailのアカウントがいいです。

## ②2段階認証プロセスを有効にする
2段階認証の設定の仕方
まず、下の画像のページに進み、「Googleアカウントを管理」をクリック。
![Googleアカウント 2022-05-30 22.10.00.png](https://qiita

元記事を表示

動的なクラス名をつけるときに気をつけること

先日[この記事](https://qiita.com/michikun06/items/d9bbea4f62af734ba234)で動的なクラス名をつける方法を解説したが
はまりポイントがあったため、追加で書きます。
# ハマりポイント
前回の記事で解説した下記のコード、、、複数のクラス名指定ができません。
“`
class=<%= "section#{question.id}" %>
“`

例えばこのように
“`
class=<%= "section#{question.id} btn btn-default" %>
“`
書くと、“`class=”section1″ btn btn-defaul“`とレンダリングされてしまいます。

# 原因
単純なHTMLの書き方の問題です。
上記の書き方だと、レンダリングされたときに“`class= section1 btn“`となってしまうため、HTMLの性質上、一つしか読み込まれません。
ですので
“`
class=”<%= "section#{question.id} btn btn-default" %>”
“`

元記事を表示

Ruby on railsにおけるFakerの導入

## なぜFakerを使用するのか
例えばバリデーションで `uniqueness: true`を指定している場合などに、値が固有のものでは複数のテストを行う際に弾かれてしまうことが考えられるため、値をランダムに生成したいという場面が存在するため。

[Fakerの公式GitHub](‘https://github.com/faker-ruby/faker’)

## Gemfileを編集する
“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
gem ‘rspec-rails’, ‘~> 4.0.0’
gem ‘factory_bot_rails’
gem ‘faker’
end
“`
:::note warn
重要
`group :development, :

元記事を表示

Ruby on railsにおけるFactoryBotの導入について

## なぜFactoryBotを導入するのか
Userモデルの単体テストを例に挙げると、ユーザーを生成する際に、`user = User.new(name:’takashi’, email:’takashi@mail, password:’111111’`のように都度記述するよりも、まとめて記述してしまった方が効率的であるため

## Gemfileを編集する
“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
gem ‘rspec-rails’, ‘~> 4.0.0’
gem ‘factory_bot_rails’
end
“`
:::note warn
重要
group :developemnt, :test doの中に記述する
:::
## bundle ins

元記事を表示

Rubyで分節可能符号判別アルゴリズムの実装

# はじめに
大学の情報理論の講義で、分節可能符号について学びました。
分節可能符号であるかどうかは、判別アルゴリズムを使って判断できます。その判別アルゴリズムをRubyで実装してみました。
![ezgif.com-gif-maker (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2549439/8dd5c9d0-0d67-3791-01be-f6d0211aa578.gif)

## 分節可能符号とは
分節可能な符号のことで、ある符号が与えられた時、その符号が1通りの復号しかできない符号のことです。2通り以上に復号できるものは分節可能符号ではありません。

たとえば、符号語系列`1100101111010`があったとします。これを復号するために以下の符号が与えられています。
`{a, b, c, d} = {00, 10, 11, 110}`
これは、たとえば符号が`00`だった場合、復号すると`a`になることを表しています。
では、`1100101111010`を復号するとどのように

元記事を表示

【Rails】Rspecのカバレッジをプルリクのコメントで表示する

# 初めに

`OSS`などでよく見る`CI`での Rspec カバレッジをプルリクのコメントで表示するやり方を記事にしておきます。

## 環境

– Rails 6.1.4
– Ruby 2.7.4
– codecov 0.6.0
– simplecov 0.21.2

# 本編

今回は`CircleCI` `Codecov` `simplecov`を利用してカバレッジを取得していきます。

## Codecov の設定

1. まずは、[Codecov](https://about.codecov.io/sign-up/)にアクセスし、アカウントを作成してください。
2. リポジトリの設定ページにアクセスし、`Codecov Token`を取得します。

## CircleCI の設定

すでに`CircleCI`での Rspec が稼働している前提です。

1. `CircleCI`の環境変数の設定ページにアクセスする。
2. `CODECOV_TOKEN`の名前で先ほど取得したトークンを設定します。
3. orb を利用するので、`Organization Settings

元記事を表示

Ruby on railsにおけるRspecの導入方法

## 環境
ruby 2.6.5
rails 6.0.0

## Gemの追加
“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
gem ‘rspec-rails’, ‘~> 4.0.0’
end
“`
:::note warn
重要
`group :development, :test`のグループ内に記述する
:::
## bundle installを実行
“`terminal:ターミナル
% bundle install
“`
## Rspecをインストール
“`terminal:ターミナル
% rails g rspec:install
“`
## .rspecに設定を追加
“`ruby:.rspec
–require spec_helper
–f

元記事を表示

Ruby on railsにおけるdevise導入手順

## はじめに
初めての投稿は、Railsでユーザー管理機能を実装する際に使用するdeviseの導入方法についてまとめておこうと思う。
## 環境
ruby 2.6.5
rails 6.0.0
## Gemfileの編集

“`ruby:Gemfile
gem ‘divise’
“`
## コマンドを実行し、Gemをインストール

“`terminal:ターミナル
# Gemをインストール
% bundle install
“`
## ローカルサーバーを再起動

“`terminal:ターミナル
% rails s
“`
## deviseの設定ファイルを作成する
– deviseを使用するためには、Gemのインストール+devise専用のコマンドで設定ファイルを作成する必要がある。

“`terminal:ターミナル
% rails g devise:install
“`
成功すると以下のようなログが流れる

“`terminal:ターミナル
create config/initializers/devise.rb
create config/loc

元記事を表示

undefined method `mechanism=’ for ActiveSupport::Dependencies:Moduleを解決した話。(Mac rails consoleが起動できない編)

# 環境
OS: Mac
SHELL: zsh
rails: 7.0.3

# undefined method `mechanism=’ …が出た!
rails consoleを立ち上げようとしたら、掲題のエラーが発生した。

https://stackoverflow.com/questions/70849954/undefined-method-mechanism-for-activesupportdependenciesmodule-nomethoder

上記の記事にならって、下記のgemを削除する。’spring’gemは元々入れていたためそのまま。
“`
gem ‘spring-watcher-listen’   # 削除
“`

# 解決した
再びrails consoleを立ち上げる。
“`
$ rails c
Running via Spring preloader in process 45130
Loading development environment (Rails 7.0.3)
irb(main):001:0>
“`
立った。。。。!
どう

元記事を表示

Ruby + ruby_gnuplot(gnuplot gem)で散布図を描く

# 準備

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

これだけ。

ただし、 Ruby 3.1.0 で matrix が bundled gem になったようなので、3.1.0 以降の場合は `gem install matrix` も必要です。
参考: [[Ruby] Bundled gemsはGemfileに指定して使おう](https://zenn.dev/shuichi/articles/bundled-gem-with-gemfile)

# 最低限の例

PNG ファイルに出力する最低限の例です。

“`ruby
# sample.rb

require “gnuplot”

Gnuplot.open do |gp|
Gnuplot::Plot.new(gp) do |plot|
p

元記事を表示

Webpacker::Manifest::MissingEntryErrorを解決した話。(Mac ローカルでrails serverの起動編)

# 環境
OS: Mac
SHELL: zsh

# Webpacker::Manifest::MissingEntryErrorが出たぞ〜!
ローカル環境で初めてrails serverを実行したら以下のエラーが発生した。
“`
ActionView::Template::Error (Webpacker can’t find application.js in /Users/hogehoge/environment/sample_app/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacke

元記事を表示

test時にActiveRecord::DatabaseAlreadyExists: Text file busyが発生!!

## はじめに
Ruby on Railsでアプリを開発中にテストを行うと、下記のエラーが発生しました(提案されたコマンド`db:test:load => db:test:purge`を入力しても解決せず)。

“`ruby:terminal
$ rails t
rake aborted!
ActiveRecord::DatabaseAlreadyExists: Text file busy @ apply2files – /home/vagrant/workspace/railstutorial6_sample/db/test.sqlite3
-e:1:in `

Caused by:
Errno::ETXTBSY: Text file busy @ apply2files – /home/vagrant/workspace/railstutorial6_sample/db/test.sqlite3
-e:1:in `


Tasks: TOP => db:test:load => db:test:purge
(See full trace by runni

元記事を表示

Unknown alias: default (Psych::BadAlias)でRailsが立ち上がらないとき

Rails6以降の立ち上げで`rails s`をしたとき

こんな感じで立ち上がらなかった
“`
hogehoge sample_app4 % rails s
=> Booting Puma
=> Rails 7.0.3 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
/Users/hogehoge/.rbenv/versions/3.1.1/lib/ruby/3.1.0/psych/visitors/to_ruby.rb:430:in `visit_Psych_Nodes_Alias’: Unknown alias: default (Psych::BadAlias)
from /Users/hogehoge/.rbenv/versions/3.1.1/lib/ruby/3.1.0/psych/visitors/visitor.rb:30:in `visit’
from /Users/hogeh

元記事を表示

独自の確率分布からアイテムを抽籤する機能の実装

無作為にレベルを選択し,そのレベルの中から無作為にアイテムを選択するというような機能を実装する必要があった.そこで実装されたコードが次である.

“`ruby
def lootbox_of_item
case $lootbox
when 0..40
rand($level[1])
when 40..60
rand($level[2])
when 60..80
rand($level[3])
when 80..90
rand($level[4])
when 90..100
rand($level[5])
end
end

$level = {
1 => 1..459,
2 => 460..1362,
3 => 1363..1755,
4 => 1756..2101,
5 => 2102..2184
}

$lootbox = rand(0..100)
“`

何これ…きも…

`lootbox_of_item`関数でアイテム番号を選択しているが,全てのwhen文にrand関数を適用していたり,ハッ

元記事を表示

RubyとJavaScriptの.sliceの違い

# はじめに
この記事は、エンジニア経験1年の大学生が実務や個人の学習で勉強になったこと、詰まったことをまとめています。間違っている箇所などがございましたら、指摘していただけると幸いです。

# 背景
コーディングテストの学習している中、RubyとJavaScriptの両方で挑戦していました。そんな中、JavaScriptでは通ったが、Rubyではテストが通らず、混乱しました。そのため、記事にしました。

# Rubyの`.slice`
“`ruby
[1, 2, 3, 4, 5].slice(1, 2)

# [2, 3]
“`
`.slice(index, length)`となっており、`length`で長さを指定して取り出す。

[参考: Rubyリファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/method/Array/i/slice.html)

# JavaScriptの`.slice`
“`javascript
[1, 2, 3, 4, 5].slice(1, 3);

// [2, 3]
“`
`.slice(b

元記事を表示

【Rails】APIモードでhelper_methodが使えない時の解決方法

# 今回の問題
RailsのAPIモードで個人開発をしている時にhelper_methodを使ってとあるメソッドを使いまわしたいと思ったのですが、うまくできず、苦戦しました。。
そんな時にとあるコードを書いただけで解決できたので今回はその解決方法について書いていきます!
以下の英語の記事を参考にしました。
[undefined method `helper_method’ for ApplicationController, Rails 5](https://stackoverflow.com/questions/39171741/undefined-method-helper-method-for-applicationcontroller-rails-5)

**詰まったコード**
“`Ruby
class ApplicationController < ActionController::API helper_method :login!, :current_user def login! session[:user_id] = @user.i

元記事を表示

OTHERカテゴリの最新記事