ワシはワシが育てる

週刊少年ジャンプと任天堂のゲームが三度のメシより好きです。

jbuilderをコントローラー内で使用する

jbuilderRailsJSONジェネレーターのデファクト的なライブラリでAPI作成には欠かせません。

jbuilderはデフォルトでpartialの機能が備わっているので、一部機能を切り離したい時にはpartialを使用するのが通例なようです。

ただしViewのpartialはクラス内メソッドより処理が重たいので、何十回も繰り返すような場合だと目に見えてパフォーマンスが落ちてしまいます。

そこで機能をモジュール化して繰り返し使用したい場合はコントローラー内に記述してしまった方がパフォーマンスは保たれます。 具体的には下のように記述します。

class HogeController
  def action
    result = to_builder(User.all).target!
  end

  protected
  def to_jbuilder(users)
    return Jbuilder new do |json|
      json.array! users
    end
  end

こんな感じで書くとresultにJSONが返ってきてくれます。
また、書き方は一通りではないので、他の手段を知りたい方は上のリンクにあるドキュメントを参考にして下さい。

(本当はここまでしてjbuilderに依存するのはどうかと思いますが、いかんせん勝手の分かる既存ライブラリに乗っかったほうが時間が節約できる…と自分に言い訳する)