読者です 読者をやめる 読者になる 読者になる

未踏作業日誌――余計なもの作るよ!

未踏の作業日誌的なものを書きましょうということで書くことにしました.余計なことばっかりしています.

SequelでJSONを出力する

Sequelでありがちなのがクエリの結果を受け取って,これをJSONで展開したいとき,デフォルトではto_jsonがサポートされていないということ.厳密に言えばサポートされているけれども,色々とやってみた結果,うまく行くパターンと行かないパターンがあるらしい.

Sequelのモデルでは,プラグインを読み込むことができる.json_serializerと呼ばれるプラグインがネイティブで付いてくるものだが,モデル内で読み込んでもうまく動作しない.一応,whereした結果でto_jsonをしてもNoMethodErrorにならないことから,関数は存在しているらしい.

調べてみた結果,いくつか方法はあるものの,成功した例を紹介してみる.

 

SequelでJSONを出力したい時にはさむもの

どうやら,Sequelのクラス宣言を上書きしているらしい.to_jsonメソッドを追加している.

このコードをSequelを読み込んだ直後に挟むと,モデルが返ってくるメソッドを呼び出した時にto_jsonすることで,JSONの文字列を返してくれるようになる.

一応,Sequel本家でもto_json_changesと書いてあるブランチが存在しているので,もしかすると本格的にデフォルトでサポートするのかもしれないがいつになるかはちょっとわからない.

地味にこれが引っかかったので,少しだけメモがてら書いておく.

 

参考リンク

Convert Sequel Dataset to JSON Object - Ruby Forum