Ruby on RailsとFirebase連携時に詰まったうえ、ググっても情報が出てこなかったので備忘録も兼ねて。
FirebaseのRealtimeDataba利用時に便利なgem ruby-firebaseですが、使い方もシンプルで分かりやすいのですが、その分ドキュメントも少なく、あまりこのパターンで使っている人が少ないのか、利用方法もあまり詳しく出てこなかったです。
基本的な使い方はruby-firebaseのGitを見てもらえればOKかなと思います。
https://github.com/oscardelben/firebase-ruby
その上で厄介だったのが、query Optionの存在です。
元々RealtimeDatabaseではクエリー自体少なくあまり便利に使えないので、がっつり使いたい方はFirestoreの方がいいらしいですが(使ったことない)、今回は指定が入ったのでRealtimeDatabaseを使いました。
Firebaseのクエリーについては公式ドキュメントで使用方法が書いていますので見てください。
https://firebase.google.com/docs/database/rest/retrieve-data#section-rest-ordered-data
orderByとかequalToとかをURL的にパラメータとして渡すというのが通常の使い方のようです。
この辺でひっかかったのは、equalToとかの指定は必ずorderByとのセットで使うということ。
orderByでキーを指定してequalToでバリューを指定するので当然と言えば当然なんですが、理解するまで時間がかかりました--;
で、これをruby-firebaseで使用するための方法ですが、結論から書くと下記のような記入方法です。
result = firebase.get("example_dir/", {orderBy: '"id"', equalTo: 100}).body
firebase.get()は通常の使い方で、example_dirで階層を指定しています。
カンマ以降のハッシュがクエリーになりますが、ここで重要なのが、orderByの値の指定方法です。
かならずダブルクオーテーションで値を囲って、その上でシングルクオーテーションで囲ってください。
これはFirebase利用時はパラメータで渡す際にダブルクオーテーションで囲む必要があるため、それをRuby上で表現するための方法になります。
この指定をしないと下記のエラーが出てはじかれます。
orderBy must be a valid JSON encoded path
これが判明するまでだいぶと時間がかかったので、同じエラーに悩む人が減ったらいいなと思います。