6

私は Jbuilder を使用しています (そして、Rabl も使用しようとしました) json をレンダリングします。アプリケーションで jbuilder テンプレートをレンダリングしようとすると、レイアウト/アプリケーションファイル内のテンプレートがレンダリングされ、 HTMLが JSON として返されます (「レイアウト/アプリケーション内」の行を参照)。

Github でコントローラに乗る

Started GET "/random_photo.json"
Processing by RidesController#random_photo as JSON
>>  Rendered rides/random_photo.json.jbuilder within layouts/application (0.3ms)
    Rendered shared/_banners_in_corners.haml (3.0ms)
    Rendered shared/_sign_in_and_out.haml (2.0ms)
    Rendered layouts/_navigation.haml (7.3ms)
Completed 200 OK in 156ms (Views: 120.7ms | ActiveRecord: 3.1ms)

ただし、テンプレートを使用せずに json をレンダリングしてrender json: @ride.as_json呼び出しを行うと、期待どおりに動作します。新しいアプリケーションを作成して同じことをしようとすると、すべてが期待どおりに機能します。

Started GET "/posts/1.json"
Processing by PostsController#show as JSON
  Post Load (0.1ms)  SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1  [["id", "1"]]
  Rendered posts/show.json.jbuilder (0.6ms)
Completed 200 OK in 20ms (Views: 19.2ms | ActiveRecord: 0.1ms)

テンプレートを正しくレンダリングしていないアプリケーションで何をしたかわかりません。何か案は?

4

1 に答える 1

22

まあ、この問題を引き起こしている問題が私のレイアウト/アプリケーションファイルであることが判明するまでに約2日かかりましたaplication.haml.

xml 用の Builder や json 用の Rabl などのテンプレート エンジンを使用したい場合、layouts/application.hamlファイルの yield フィールド内でテンプレートをレンダリングしようとしたため、html が JSON として返されました。

application.haml問題はファイル内にあることがわかりました

application.html.haml という名前を付けることで問題が解決しました...

于 2012-05-04T05:47:07.090 に答える