LoginSignup
1
0

More than 3 years have passed since last update.

gem ruby-firebase利用時のquery optionの書き方(備忘録)

Posted at

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

これが判明するまでだいぶと時間がかかったので、同じエラーに悩む人が減ったらいいなと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0