0

Rails 3コントローラーがあります:

class EmployeeController < ApplicationController
  respond_to :json

  def index
    employees = Employee.all
    respond_with employees
  end
end

pry ブレークポイントを設定してto_jsononを呼び出すとemployees、期待どおりの結果が得られます。JSON オブジェクトの配列のシリアル化であり、そのプロパティはEmployeeActiveRecord モデルの属性です。

[1] pry(#<EmployeeController>)> employees.to_json
=> "[{\"created_at\":\"2013-06-21T19:22:14Z\",\"email\":\"ian@ ...

ただし、コントローラーから JSON の結果が返されるまでに、オブジェクト ラッパーの2 つの追加レイヤーが取得されます。1 つはリスト自体を囲み、もう 1 つは各オブジェクトを囲みます。

{"employee":[{"employee":{"created_at":"2013-06-21T19:22:14Z","email":"ian@ ...

私が使用しているライブラリは、これらの追加のラッパー レイヤーを想定していません。Railsのどの部分がそれらを追加する責任がありますか?これは私が制御できる動作ですか?

バージョン:

$ rails -v
Rails 3.2.13

アップデート

JSON gem のバージョン:

$ grep -i json Gemfile.lock 
    multi_json (~> 1.0)
    multi_json (~> 1.0)
  json (1.8.0)
  multi_json (1.7.7)
    json (~> 1.4)
    multi_json (~> 1.0)
    multi_json (~> 1.0, >= 1.0.2)
4

1 に答える 1

1

電話

ActiveRecord::Base.include_root_in_json = false

レンダリングする前に、何が得られるかを確認してください。

それが機能する場合は、

# Disable root element in JSON by default.
ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = false
end

config/initializers/wrap_parameters.rb で。

于 2013-06-26T20:10:37.553 に答える