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

リア充爆発日記

You don't even know what ria-ju really is.

RailsにJbuilderを導入したら、レスポンスが帰ってこなくって困ったでござるの巻

まず最初にJbuilderってJavaのなんかだと思った。富士通とかそういうところが出してるIDEとかなんかそういうの。10万くらいしそうな。

で、そうじゃなくてレスポンスをjsonで組み立てるときに使うやつ。
https://github.com/rails/jbuilder

WebAPIサーバなんか創るんだったら、ぜひ使ってみた方がいい。respond_withとか辛すぎる。

before

    respond_with article, include: [
      :hoge,
      {comments: {include: {author:{only: :name, methods: 'avatar_thumb_url' }}}} ,
      {likes: {only: :id, include: {user:{only: :id, methods: 'avatar_thumb_url' }}}} ,
      {article_images: {except: ArticleImage::FILE_STATUS_COLUMN, methods: ArticleImage::IMAGE_URL_METHODS}},
      {user: {except: User::FILE_STATUS_COLUMN, methods: Author::IMAGE_URL_METHODS}}
    ], except: Article::EXCLUDE_COLUMN

こんな感じのが・・・
after

json.array! @articles do |article|
  json.extract! article, :id, :title, :rating, :article_url, :thumb_url
  json.author article.author, :name, :title, :avatar_thumb_url
  json.hoge article.hoge, :name, fuga, piyo
  json.article_images article.article_images, :article_url, :thumb_url
end

こんなにわかりやすく・・・!

で、最初ブラウザでJsonでるでるーって思いながらやってたんだけど、詳細を詰めにかかったときにプチハマりした。もともとRspecでテストが書いてあったのでポーティングも楽勝と思ったらレスポンスが空でテストが全ゴケた。

ちょっと調べたらわかった。
http://stackoverflow.com/questions/9965945/why-is-jbuilder-not-returning-a-response-body-in-json-when-testing-rspec
JbuilderはさむことRspecではrender_viewというプロセスが必要だったらしい。
こうやる。

RSpec.configure do |config|
~snip~
  config.render_views = true
~snip~

これでテスト全通り気持よすぎワロリーヌ。