0

コレクションを積極的に Rails にロードして json でレンダリングしたい場合は、次のようにする必要があります。

@photos = @event.photos.to_json(:include => 
  {:appearances => {:include => :person}}
)

このコレクションをマップしたい場合はどうすればよいですか? ご覧のとおり、これはもはやコレクションではなく、json 文字列です。この必要な熱心な読み込みの前に、私は次のことを行っていました。

@photos = @event.photos.map{|photo| 
  photo['some_funky_stuff'] = photo.funky_calculation
  photo 
}

しかし、私は2つのことを一緒に行うことができないようです:

@event.photos.map{|photo| 
  photo['some_funky_stuff'] = photo.funky_calculation
  photo 
}.to_json(:include => 
  {:appearances => {:include => :person}}
)

上記は「外観」(熱心にロードされた結合レコード)を示していません...これら2つを一緒に行うにはどうすればよいですか? どうもありがとう!

4

3 に答える 3

2

「積極的な読み込み」という用語が少し混同されている可能性があります。以前の回答で述べたように、熱心にロードするには、アソシエーションで使用する必要があります。ただし、:includeto_json呼び出しで使用する場合は、熱心であるかどうかに関係なく、同じ結果が得られます。

しかし、あなたの質問に答えるために、to_jsonメソッドに外観とfunky_calculationの両方を含めるには、代わりにそれを組み合わせることができます:methods。このようにしてみてください:

@photos = @event.photos.to_json(
  :include => {:appearances => {:include => :person}},
  :methods => [: funky_calculation]
)

また、パフォーマンスを向上させたい場合(積極的な読み込み)は、関連付けにもincludeを使用します。

@photos = @event.photos.includes(:appearances => :person).to_json(
  :include => {:appearances => {:include => :person}},
  :methods => [: funky_calculation]
)
于 2012-09-25T06:51:08.717 に答える
1

includeshas_many アソシエーション後に使用して熱心にロードできます

@photos = @event.photos.includes(:appearances => [:person]).to_json
于 2012-09-25T06:39:29.877 に答える
1

のオプションとして、写真にjoins()またはを使用してみてください。includes()to_json()

http://guides.rubyonrails.org/active_record_querying.html#using-array-hash-of-named-associations

于 2012-09-25T06:39:47.797 に答える