私たちのレール3.2アプリでは、Jbuilderを使ってjsonレスポンスを表示しています(ここでは特別なことは何もありません)。 JSON形式のビューは、このような単純なことができますRailsレンダリングjson partial in model
json.extract!(page, :id, :name, :url_name)
_model_name.json.jbuilder私たちはしばしば深くネストされたJSONオブジェクトを返す必要があり、JBuilderのパーシャルは、このために素晴らしい仕事:
_page
json.extract!(page, :id, :name, :url_name)
json.page_images (page_images) do |json, page_image|
json.partial! page_image
end
.json.jbuilder最後の例では、ページ、およびネストされたpage_images、JSON表現...再び何も特別なを取得します。
多くの場合、1つの部分で別の部分が呼び出され、2〜3レベルの入れ子になったjsonオブジェクトが返されることがあります。
PROBLEM
私たちはすぐにビューのために深くネストされたJSONオブジェクトを形成するために一緒に複数のパーシャルをリンクするJBuilderのパーシャルを使用し、前述のように。また、これらの全く同じネストされたオブジェクトを(jsonではなく)ハッシュとして構築し、それらをモデルで使用できるようにする必要があります。
.attributes!を使用してハッシュを出力するJbuilderオブジェクトを取得するのは簡単です。メソッドから継承されていますが、Jbuilderにモデルからのビューパーシャルへのアクセスを与えることに重大な困難があります。
Jbuilderソースを見ると、JbuilderTemplateクラスがすべての作業を行うためにコントローラコンテキストにアクセスする必要があるようです。
class SomeClass
def initialize pages
@pages = pages
@context = ActionController::Base.new
end
def to_hash
builder = JbuilderTemplate.new(@context)
builder.pages(@pages) do |json, page|
json.partial! page
end
builder.attributes!
end
end
上記の例では明らかに間違っているが、それは何をすべきかを示しています。
は、我々はこのような何かを試してみてください。私はどのようにモデルからコントローラを初期化し、コントローラコンテキストを渡すかについてはわかりません。私たちは以下の通りです
いくつかのリード:
誰もが正しい方向に私たちを指すよう助けることができますか?
あなたはまだになりたい場合は(http://stackoverflow.com/questions/9234018/rails-rendering-json-partial-in-model#answer-37977283)[以下の答え]私を見てくださいjbuilderテンプレートを再利用することができます。 –