一覧表示させるためにwhereを使う
def self.all
list = collection.where("format", "=", null).order(:created_at).get
end
上記のような形でformatというフィールドにnullを持ったドキュメントを全て持ってくるようなクエリを作るようなコードを書いているつもりなのですが、null部分がundefinedのエラーが出てきてしまい、取得することができなさそうなんですね。
ここの記事には、
Firestore select where a field is null [duplicate]
it is not possible to index on a field that is NOT in the document
と書いてあるし、無理なのかとも思ったんですが、更に下の方には、
However there is a workaround which consists in querying documents that contain properties with a null value data type
とあるので、いけそうでもある。
解決策
rubyではnullってnilで表すんだわ
そう、これですね。ruby上ではnullを扱うにはnilにするのでした。
def self.all
list = collection.where("format", "=", nil).order(:created_at).get
end
とすれば、firebaseからnullを条件にしてドキュメントを取ってくることができました。
おまけ
データを取得してくる時にコレクションに対して、インデックスがないから作れという形でエラーが出ることがあります。
9: The query requires an index. You can create it here: 長ったらしいURL
こんな感じのエラーが出るので、URLをコピペすると、firebaseコンソールに飛び、インデックスを作成するためのダイアログが開くので、ポチッと押してインデックスがビルドされるのを待ってください。ビルドには数分かかります。しばらく経ってまだビルド中みたいになっていてもコンソール自体に更新かけると終わってたりします。