0

親愛なるスタックオーバーフローの皆さん、Rails プロジェクトをダウングレードして、問題なく Rails 3 で実行できるようにしたいと考えています。以前はレールの最新バージョンで動作していましたが、オフィスはこれを使用したくありません。この特定の行を書き直すのに問題があります。

@results = @sessions.to_json(:include => [:orientations, :subtopics, :data_files, :participants, :formats, :comments => {:include => [:user => {:only => [:id, :name]}]}])

@sessions はもちろん結果のリストです。古いバージョンのレールでも実行できる代替案を作成する方法を知っている人はいますか?

前もって感謝します

敬具

4

1 に答える 1

1

どうぞ:

オブジェクトで to_json が呼び出されるたびに、as_json が呼び出されてデータ構造が作成され、そのハッシュが ActiveSupport::json.encode を使用して JSON 文字列としてエンコードされます。これは、オブジェクト、数値、日付、文字列などのすべてのタイプで発生します (active_support/json を参照)。

ActiveRecord オブジェクトも同じように動作します。モデルのすべての属性を含むハッシュを作成するデフォルトの as_json 実装があります。モデルで as_json をオーバーライドして、必要な JSON 構造を作成する必要があります。as_json は、古い to_json と同様に、装飾的に含める属性とメソッドを指定できるオプション ハッシュを使用します。

def as_json(options={})
  super(:only => [:email, :avatar], :include =>[:addresses])
end

1 つのモデルを表示するためのコントローラー コードは、常に次のようになります。

render :json => @user

通常とは違うことをしなければならない場合は、オプションを渡して as_json を呼び出します。

render :json => { :success => true, 
  :user => @user.as_json(:only => [:email]) }

この話の教訓は次のとおりです。コントローラーでは、to_json直接呼び出すのではなく、render に呼び出しを任せてください。JSON 出力を微調整する必要がある場合as_jsonは、モデルでオーバーライドするか、as_json直接呼び出します。

すぐに使用できるようにコードを修正してください。as_jsonに移行する際に心配することが 1 つ少なくなりますRails 3 or Ruby 1.9.3

于 2014-03-25T16:13:22.303 に答える