Help us understand the problem. What is going on with this article?

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

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

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

hiromi1244
PHP開発から初めて今はRuby on railsとPythonを勉強中です。 全言語独学
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした