2013-01-22 9 views
17

JBuilderでjsonビューを作成しました。しかし、私はこれをデータオブジェクトにプリロードしたいので、Backboneはフェッチせずにデータを早期にアクセスできます。JBuilderビューをhtmlビューでレンダリングする

list.json.jbuilderビューをlist.html.erbビューにレンダリングするにはどうすればよいですか?

は、通常のJBuilderなしで、私はこのような何かをしたい:

ビュー内から呼び出さ
<div data-list="<%= @contents.to_json %>"></div> 

答えて

15

renderは、渡されたテンプレートまたは部分の文字列表現を返します。あなたは好きなようにあなたのビューにその文字列を埋め込むことができます。ただし、次の点に注意してください。

  • テンプレートの名前に接尾辞/拡張子を付ける必要があります。そうしないと、Railsは呼び出しているテンプレートファイルについて混乱するかもしれません。つまり、list.json.jbuilderの代わりにlist.html.erbを選択することがあります。この呼び出しをからlist.html.erbにする場合は、list.html.erbをレンダリングしようとすると、無限再帰とSystemStackErrorが発生します。 render:formatオプションを使用しても機能していないようです。
  • テンプレートの修飾パスを指定する必要があります。 list.json.jbuilderlist.html.erbと同じディレクトリに存在するため、 "list.json"の正しいテンプレートは見つかりません。
  • renderコールの出力をrawに渡す必要があります。それ以外の場合は、ビューに埋め込まれたときにエスケープされます。

だから、あなたたとえば、あなたはあなたのテンプレートが/app/views/fooにあったと仮定すると、これを書くかもしれません:

<div data-list="<%= raw render(:template => "foo/list.json", :locals => { :contents => @contents }) %>"></div> 
+2

これは、このようなprotipです!ありがとう。 'raw 'の代わりに' <%== %> 'を使うこともできます –

+0

jbuilderを使ってhtmlの部分をjsonのプロパティとしてレンダリングすることに挑戦しました。 json.propレンダリング(:template => 'partials/_resort_summary'、:locals => {resort:@resort}) – dc10

+0

ありがとうございました。私はこれをどうやってやろうと考えていたのですか? –

関連する問題