Ruby

Your bundle is locked to mimemagic (0.3.5), but that version could not be found in any of the sources listed in your Gemfile. If you haven't changed sources, that means the author of mimemagic (0.3.5) has removed it. You'll need to update your bundle to a

Railsプロジェクトを動かそうとしたら下記のエラー Your bundle is locked to mimemagic (0.3.5), but that version could not be found in any of the sources listed in your Gemfile. If you haven't changed sources, that means the author of mimemagi…

Ruby eachの引数で配列を展開する

# idと名前の2次元配列、CSVの配列などを使う時に便利 arr =[ [1, 'hoge'], [2, 'moge'], ] arr.each do |id, name| puts id, name end # 出力 # 1 # hoge # 2 # moge 以下と同等のことが出来ます arr.each do |values| id, name = values puts id, name end…

Railsで文字列のバージョンを比較する

StringのVersion情報 "2.1.1" を "2.2.0" などと比較したい Gem::Version を使うことで比較できる p "1.9" < "1.10" # => false p Gem::Version.new("1.9") < Gem::Version.new("1.10") # => true 文字列にも対応。便利。 "1.1.beta9" と "1.1.beta10" では…

Heroku SeachBox ElasticsearchがRails Searchkickのデフォルト設定で動かない

実運用しているアプリが2020/2/13あたりからインデックスの新規作成が上手くいかず調査しました。 エラー class Post < ApplicationRecord searchkick end 動かない状態のサンプル(GitHub) reindexでエラーが出ます。 irb(main):001:0> Post.reindex Traceba…

RSpec 1つのexpectで複数のchangeを検証する

表題通り1つのexpectに対して複数のchangeを検証したい it '複数のchangeを見るぞ' do expect { subject }.to change { x }.by(1). and change { y }.by(2) end 見づらいのであまり使いたくない… 参考 stackoverflow.com RSpec3.1からの機能らしい rspec.info

FactoryBotで複数個を一括で作る

create_list(:user, 10) create_list に個数を渡すだけ。 神🎉 通常の create 同様、引数も渡せます create_list(:user, 10, name: 'hoge') create以外にもbuildもありました build_list(:user) 公式ドキュメントが読みやすくて感動 devhints.io

Step-to-Rails-Expert.rb#20 に参加した話

Step-to-Rails-Expert.rb#20に参加してきました step-to-rails-expert-rb.connpass.com Step-to-Rails-Expert.rb 参加は2回目 今回からもくもく会ベースの企画になりました 内容 みなさん今日やることや気になった話題のシェアしながらもくもくしたり話した…

メンター業はじめました(?)

MENTAというメンターとメンティーのマッチングサイトに登録してみたら 申し込んでくれる方がいたため晴れて(?)メンターになりました✨ menta.work なんでやっているか つまるところ、自分のためです。 スキルアップのため 恩送り的な 情けは人の為ならず的…

Rubyのmin_byで比較対象にnilがいるとArgumentErrorでコケる

Rubyの簡単なサンプル arr = [ { name: "hoge1", age: 10 }, { name: "hoge2", age: 13 }, { name: "hoge3", age: 15 }, { name: "hoge4", age: nil } ] arr.min_by{ |e| e[:age] } => ArgumentError (comparison of NilClass with 10 failed) ブロックの戻…

電話番号の正規表現はどうしたらいいのか

Railsのアプリを作っていて電話番号のバリデーションをするための正規表現はどう書いたらいいのか悩んだので調べてみました ※細かくやっていますが新しい電話番号や考慮されないパターンがあるかもなのでバリデーションは緩くしておくことをおすすめします。…

Rubyで配列の中央値(メジアン)を求める

Rubyで中央値(メジアン)を求めるコード (a.size % 2).zero? ? a[a.size/2 - 1, 2].inject(:+) / 2.0 : a[a.size/2] 動作確認 a = [3, 5, 10, 23, 88] (a.size % 2).zero? ? a[a.size/2 - 1, 2].inject(:+) / 2.0 : a[a.size/2] # => 10 a = [3, 5, 10, 23, 8…

Rubyで改行、空白を削除する

文字数を取得する時などに改行や空白文字を削除したい text = "春はあげぽよ てか、どんどん白くなる山の端らへんが異常に明るくなって、紫の雲が細く風に流されてるの見て、マジパねぇ、ウケる。 夏は神テン 満月がデラヤバなんてあえてウチの口から言うま…

Rubyの多重代入 ,(カンマ)で区切られた代入の挙動

こんなやつが出てきて挙動が分からず困っていたら多重代入というやつらしい。 a, b = Hoge.moge 多重代入についてまとめます。 左辺が1つで右辺が複数の場合 配列に変換される a = 1, 2 #=> [1, 2] a #=> [1, 2] 左辺、右辺ともに2つの場合 左辺の各変数に右…

constantizeした時にactive_support/inflector/methods.rb:268:in `const_get': uninitialized constant Hoge (NameError)と怒られる問題[Rails]

h = 'Hoge'.constantize h.create(fuga: 'fuga') した時に active_support/inflector/methods.rb:268:in `const_get': uninitialized constant Hoge (NameError) とHogeという定数、クラスがなかったため怒られてしまった。 safe_constantizeで回避 safe_con…

rake taskの中断はreturnではなくnextだった[Rails]

task :test do puts 'hoge' return puts 'moge' end 実行する rake aborted! LocalJumpError: unexpected return 怒られた… rake taskの中断はreturnじゃなくてnextとのこと task :test do puts 'hoge' next puts 'moge' end 以下の場合はreturnとのこと tas…

Your Gemfile has no gem server sources. If you need gems that are not already on your machine, add a line like this to your Gemfile:

Your Gemfile has no gem server sources. If you need gems that are not already on your machine, add a line like this to your Gemfile: source 'https://rubygems.org' と怒られた時の対処法 英文読めば分かるですが自分が読まずに調べてしまったので……

Rubyのeach_with_indexでeach中のindexを取得する

each_with_index Rubyの each でインデックスを取得したい場合 each_with_index を使う。 %w(a b c).each_with_index do |n, index| puts "#{index} #{n}" end # 0 a # 1 b # 2 c インデックスを任意の数字から始める with_index indexを1から始めたい場合な…