1

JSONを返すコントローラーメソッドがあります。ただし、そのJSONオブジェクトの一部に、レンダリングされたシリアル化されたHTMLビューが含まれている場合があります。したがって、私のコントローラーメソッドには次のような行があります。

html = render_to_string :partial => 'foo/bar'
# ...
render json: {x: 'y', html: html}

しかし、RailsはJSONビューのみを探しているため、これは失敗します。

ActionView :: MissingTemplate({:locale => [:en]、:formats => [:json]、:handlers => [:erb、:builder、:coffee、:slim、:haml]を含む部分的なfoo/barがありません}。[…]

どうすればこれを解決できますか?


更新:以下の構文を使用して、レイアウトの1つの「レベル」をrender_to_stringhtmlとして取得しましたが、そのレイアウトが独自のパーシャルをレンダリングするときに同じエラーが発生します。

html = render_to_string :partial => "foo/bar.html.haml"

確かにここに解決策がありますよね?


アップデート2render_to_string :action => 'method_in_this_controller'トリックをしているようです。

4

3 に答える 3

1

この正確な問題に遭遇したため、Yanhaoの答えを繰り返します。

試す:

html = render_to_string :partial => 'foo/bar', :formats=>[:html]
于 2014-02-27T18:27:34.327 に答える
0

私は自分の行動の中でそのようなことを書いています:

def show
  ...
  respond_to do |format|
    format.js { render :json => data }
  end
end

それはあなたを助けるかもしれません。

于 2012-10-19T07:43:01.807 に答える
0

ファイル「apps/views/foo/_bar.*」がありますか? How do I render a partial to a string? を使用して、HTML を JSON パラメーターとしてレンダリングできました。

respond_to do |format|
   format.html { redirect_to post_path(post) }
   format.js { 
     render json: { 
       error: flash[:error],
       content: (render_to_string partial: '/comments/comment', locals: {comment: comment}, layout: false )  
     } 
   }
end
于 2013-12-24T08:12:36.027 に答える