カクカクしかじか

技術的なアレコレ

ActiveHashのデータに対してSet型の値で検索を行う場合の注意点

検証環境

Rails 5.1.7
Ruby  2.5.7

結論

Set型の値をto_aで配列に戻してあげないと、配列として解釈してはくれない模様..

# 都道府県モデル
class Prefecture < ActiveHash::Base
  field :name
  field :english

  add id:  1, name: 'ほげ県', english: "Hoge"
 <中略>
end
$ prefecture_ids
=> #<Set: {1, 2, 3}>

$ Prefecture.where(id: prefecture_ids).to_a
=> []

$ Prefecture.where(id: prefecture_ids.to_a).to_a
=> [#<Prefecture:0x00007fc28d62bd10 @attributes={:id=>1, :name=>"ほげ県", :english=>"Hoge"}>

所感

mongoidだと to_a せずに Set型のまま検索条件にセットしても配列として解釈してくれるので、普通に検索出来るのかと思ってた...(これは罠だww)
普段使い慣れているライブラリの常識で他のライブラリを使うとこういうことになるので、使うツールやライブラリのREADMEやコードをちゃんと読んで使うのがホントに大事!