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

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

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

元記事を表示

【Rails / devise】ユーザー編集機能の実装(「現在のパスワード入力」の設定を無くす方法)

## 初めに

##### このような方におすすめの記事です
・devise ユーザー編集の方法を知りたい
・デフォルトの「現在のパスワード」を入力せずにデータをアップデートしたい

## 前提

・deviseを導入済(インストール〜モデル作成まで)
・編集機能のレイアウトを作成済

以下の記事を参考に導入しています。

[Devise] パスワードを入力せずにユーザー情報を編集する
Deviseでパスワードの入力無しでユーザー情報の更新をする方法

## 手順

#### ①deviseのコントローラーを作成する

ターミナル
“`
rails generate devise:controllers users
“`

#### ②作成された以下のファイルに追記する

“`app/c

元記事を表示

railsで動的にclass/id名をつける

# 結論
クラス名に変数代入を使用する。

# 背景
DBからデータを取得して一つずつ表示する機能を実装していました。
動的に表示非表示を切り替える処理を実装するときにrailsのviewファイルに
“`

class=”section1″
class=”section2″
class=”section3″
class=”section4″

.
.
.

class=”section10″

“`
と記載して都度“`display:none“`で表示非表示を切り替えるというものでした。
# 何が悪なのか
railsの設計思想の一つにDRY(Don’t Repeat Yourself)があります。「コードを重複させない」という意味合いです。
可読性が下がる。コード量が増える意味合いでも極力コードの重複は減らさなければなりません。

# 具体例
今回はDBから取得したデータを一つずつ表示非表示するというものでした
“`
class=<%= "section#{questio

元記事を表示

rubyのsort_byを用いた複数条件下のおけるソート方法

## 複数条件下でソートさせる方法

`sort_by`を使うことで簡単に実現できる。

以下の例の場合、まず`val2`で昇順ソートした後に`val1`で昇順ソートされる。

“`ruby
sorted_array = array.sort_by do |val1,val2|
[val1,val2]
end
“`
また、降順ソートをしたい場合は、`-`をつけるだけでいい。
(負の数でソートすれば順番は逆になるため)
“`ruby
sorted_array = array.sort_by do |val1,val2|
[-val1,val2]
end
“`
この例だと、まず`val2`で昇順ソートされ、次に`val1`で降順ソートされる。
ただし、文字列は降順ソートできない(負の値という概念がないため)

## 実行結果

“`ruby
[1] pry(main)> array = [[2,”test2″],[1, “test2”], [3, “test1”]]
=> [[2, “test2”], [1, “test2”], [3, “test1”]]

元記事を表示

【EC2/Amazon Linux2】 S3にアップロードした画像ファイルが削除できなくて調査したこと

# 始めに
RailsアプリケーションのAction Textを使用した画像アップロード機能のテストを行なった際、
画像の削除処理がS3に反映されない現象が発生しました。

本記事は、調査に使用したコマンドと調査観点をメモしています。

# インフラ構成
調査時点のインフラ構成図は下記となっています。
AppサーバーにIAMロールを付与しており、VPCエンドポイントを経由して、S3と通信を行う構成となっています。

![スクリーンショット 2022-05-20 18.31.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230985/8f6ebae8-2e97-1dff-a09d-ad238cc0b898.png)

# 調査内容

## 対象のEC2インスタンスからS3を操作することが可能か確認
下記コマンドを実行して、 `AccessDenied`が表示されていることを確認しました。

“`shell
# 指定のバケットから一覧を取得できるか
aws s3 ls s3://指定バケット名

元記事を表示

Ruby初心者が「TryRuby」で引っかかったところ

# 概要
はじめまして,今回新しくRubyを学習するにあたって,Rubyの雰囲気を感じ取るため,WEBブラウザ上でRubyに触れることができる[TryRuby](https://try.ruby-lang.org/)をやってみました.初心者の私が「ん?」ってなったところをピックアップして何がわからなかったか, 紹介したいと思います.初心者にRubyを教えるにあたってここに引っかかりやすいかもという参考になれば幸いです.
私もいつか教える側になったときにはこれを読み返してこの部分は丁寧に教えたいですね.

# メソッドのあとの「 ! 」?

“`ruby:保存してしまい込みました
ticket = [12, 47, 35]
ticket.sort!
puts ticket
# [12, 35, 47]
“`

> リストを整列(sort)しました。変数ticketはもう変わっています。 sort!メソッドのさいごに、大きく目立つ感嘆符があるのに気づきましたか? Rubyのメソッドは、しばしば変数の中身を変更してしまう時にこのように叫びます。 ですがこれは何てことはない、ただの印です

元記事を表示

【Rails】(解決)空のデータベースに対してnil?などのメソッドで条件分岐してもエラーがでる(undefined method `〇〇◯’ for nil:NilClass (NoMethodError))

# 環境
– Mac(12.2.1)
– MacBook Pro (13-inch, 2020)
– 2 GHz クアッドコアIntel Core i5
– 16 GB 3733 MHz LPDDR4X
– ruby (2.7.5)
– rails (7.0.1)
– mysql2 (0.5.3)

# はじめに
“`app/controllers/contents_controller.rb
if EgoScore.where(user_id: current_user.id).last.test_result_id.nil?
@result =”診断していません”
else
ego_score=EgoScore.where(user_id: current_user.id).last.test_result_id
@result = TestResult.find(ego_score).egogram_type
“`

“`app/views/contents/index.html
<%=@result%>
“`
上記でエラー

またnil

元記事を表示

【Rails】created_atを2ステップで日本語に設定し、ビューに表示させる方法

## 初めに

今回は2ステップで日本語に設定し、ビューに表示させる方法をまとめました。

#### このような現状にお悩みの方向けの記事です。

・データが作成された時間を日本時間で表示したい方
・ビューに以下の記述をしたところ
“`
<%= 表示したいデータの変数名.created_at %>
“`

このような時間表示になることでお悩みの方→ 2022-05-26 11:34:06 UTC

## 実装方法

### ①日本時間の表示設定をする

class Application < Rails::Application内に 日本時間に設定する表記を追加します。 ```config/application.rb module LittleArtist class Application < Rails::Application # 日本時間に設定する表記を追加 config.time_zone = 'Tokyo' end ``` サーバーを再起動します。 ``` rails s ``` ### ②ビューの設定 ``` <%= 表

元記事を表示

【脱駆け出しエンジニア】binding.pryについて

# 概要
本記事ではrailsでデバッグする際に使用するbinding.prybについてです。
会社でお恥ずかしい思いをしましたので記事として残しておきます。

# 経緯
先日、会社でこのようなやりとりがありました。

私) 「センパイ、エラーが出てるんですけど何が原因でどこでエラーが出てるかわからないっす」
先輩エンジニア)「とりあえずbinding.pry使いなよ。」
私) 「バ、バ、バインデングぷらい,,,,はにゃ?」
先輩エンジニア)「,,,え??binding.pry知らないの???それはもうif分知らないでjs書いてるのと一緒だよww(ジョーク)」

# binding.pryとは
railsで処理を一時的にストップさせるデバックツールの一つです。
エラーの発生箇所に“`binding.pry“`と記載することで処理を一時停止させることができます。
binding.pryはただ処理を止めるだけでなく、オブジェクトの参照や変更したり、その後の処理を一行ずつ実行することができます。
binding.pryは.rbファイルだけでなく、.erbファイルでも使用することができます

元記事を表示

RubocopでRails/Presence: Useと指摘を受ける

RuboCopで下記の指摘を受けました。

“`
Rails/Presence: Use self.カラム名.presence || “hogehoge” instead of self.カラム名.present? ? self.カラム名: “hogehoge”.
“`
“`rb
# 指摘を受けたソース
self.カラム名.present? ? self.カラム名: “hogehoge”
“`
どうやら、presentメソッドではなく、
presenceメソッドというものを使いなさいと指摘されているようです。

下記記事によると、
presenceメソッドは、
オブジェクトが存在すればそのオブジェクトを返し、
存在しなければnilを返したい場合にとても便利なショートカット
…とのこと。

https://techracho.bpsinc.jp/hachi8833/2021_02_26/62326

カラムが存在しない場合は、”hogehoge”という文言を返したいので、
下記ソースに修正。
二回カラム名を書く以前のソースよりシンプルになりました。
“`rb
self.カラム名

元記事を表示

URI.encodeでundefined method ‘gsub’ for nil:NilClass

# この記事のまとめ

– `URI.encode`メソッドの引数にnil渡すと`undefined method ‘gsub’ for nil:NilClass` エラーが出る
– `URI.encode`ではnil避けがされない
– `URI.encode`自体が非推奨なので`URI.encode_www_form_component`を使おう

# 実際に起こった問題

– `URI.encode`メソッドで、URLをエンコーディングしようとした
– しかし500エラーが発生した。
– スタックトレース見ると、`undefined method ‘gsub’ for nil:NilClass` が出ていた

該当コード:

“`ruby
url = post.url
post.url #nil

URI.encode(post.url) #undefined method ‘gsub’ for nil:NilClass
“`

# 対応

– `URI.encode_www_from_component`を代わりに使おう
– 実は`URI.encode`自体もう使うな

元記事を表示

RubyでPythonのようにfor i in range(n)する

# 普通のコード
rubyの普通のrangeオブジェクトだとこうです
“`ruby
(0…n).each do |i|
puts i
end
“`
for文で書き直すと以下。
“`ruby
for i in 0…n
puts i
end
“`
# range関数
しかし、私はPythonのようにrangeを書きたいと思いました。
そこで、以下の関数を定義します。
“`ruby
def range(l, r=nil, s=nil)
return 0…l unless r
return l…r unless s
(l…r).step(s)
end
“`
`range(l)`のとき、`0…l`を返す。
`range(l, r)`のとき、`l…r`を返す。
`range(l, r, s)`のとき、`(l…r).step(s)`を返す。

使い方は以下です。※コロンは不必要、endは必要です。
“`ruby
for i in range(10, 20, 2)
puts i
end
#=> 10
#=> 12
#=> 14
#=

元記事を表示

rbenvで指定してるrubyのversionと、実際のversionが違う時の対処

# rbenvで指定してるrubyのversionと、実際のversionが違う
versionがなぜかあっていない。実際のrubyのversionが更新されない。。
OS: Mac
SHELL: zsh
“`
$ ruby -v
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21]

$ rbenv versions
system
2.6.9
3.1.1
* 3.1.2 (set by /Users/<ホームディレクトリ>/.rbenv/version)
“`

# よくわからんけどrbenv initをする
すると、eval “$(rbenv init – zsh)”を~/.zshrcに追加すれば、rbenvを読み込んでくれるらしいことがわかる。
“`
$ rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval “$(rbenv init – zsh)”

元記事を表示

OTHERカテゴリの最新記事