1. ホーム
  2. ruby-on-rails

[解決済み] Railsで異なる形式のパーシャルをレンダリングするには?

2022-09-03 20:51:50

質問

HTMLを含むJSONレスポンスを生成しようとしています。 したがって、私は /app/views/foo/bar.json.erb :

{
  someKey: 'some value',
  someHTML: "<%= h render(:partial => '/foo/baz') -%>"
}

レンダリングしたい /app/views/foo/_baz.html.erb を表示させたいのですが、表示されるのは /app/views/foo/_baz.json.erb . 渡される :format => 'html' は役に立ちません。

どのように解決するのですか?

構築する roninek さんの回答 を基に、私は以下のような最適な解決策を見つけました。

を/app/helpers/application.rbに追加してください。

def with_format(format, &block)
  old_format = @template_format
  @template_format = format
  result = block.call
  @template_format = old_format
  return result
end

/app/views/foo/bar.jsonの中にあります。

<% with_format('html') do %>
  <%= h render(:partial => '/foo/baz') %>
<% end %>

別の解決策としては render を受け入れるために :format パラメータを受け取ります。

を取得することができませんでした。 render :file をローカルで動作させることができず、また、パスの混乱もありませんでした。