Jbuilder のフラグメントキャッシュで、配列で書きたい場合とハッシュで書きたい場合のキャッシュを共通化したい

結論

views/book/_book.jbuilder

json.cache! book do
  _j = book.to_builder.target!
    JSON.parse(_j).each do |k,v|
        json.set! k, v
    end
end

controller で @tmpl[:book] が set されていると仮定
views/book/show.jbuilder

json.book do
  json.partial! 'book/book', book: @tmpl[:book]
end

controller で @tmpl[:books] が set されていると仮定
views/book/list.jbuilder

json.books @tmpl[:books], partial:'book/book', as: :book

背景

単体表示に

{
    book: {
        bookId: "moge"
    }
}

複数表示に

{
    books:[
    {
      bookId: "moge"
    },
    {
      bookId: "moge2"
    }
    ]
}

としたいみたいなやつがググっても全然出てこなかったので。

所感

まぁこうは普通しないわなぁ。

このエントリーをはてなブックマークに追加