0

HTML / CSSのスタイリングを担当するメインページがありますが、一部のコンテンツはパーシャルからのものです。パーシャルは、いくつかのローカルまたはパラメータ、つまりcurrent_userまたはpersonを受け取り、存在する場合は情報を表示します。

部分的にレンダリングされたものがあるかどうかを確認する方法はありますか?私の最終目標は次のようなものです。

<% if my_partial can render something %>
 <div class="css_for_something">
  <%= render(partial: 'my_partial', locals: {...} ) %>
<% else %>
  <div class="css_for_no_info">
   <%= render something else %>
<% end %>

パーシャルにスタイリングロジックを処理させたくありません。コンテンツがある場合は表示するだけです。逆に、メインページは、値のチェックやデータベースのクエリなど、パーシャルのロジックについて何も知らないはずです。

ありがとうございました

4

2 に答える 2

2

render_to_string残念ながら、ビューでは利用できないように見えるため、レール4.2.4ではChrisPeterのソリューションは機能しませんでした。

ただし、以下は機能しました(rails 4.2.4):

<% partial_content = render partial: 'my_partial' %>
<% if partial_content.present? %>
  <%= partial_content %>
<% else %>
  <%# rendered if partial is empty %>
<% end %>

present?チェックは、レンダリングされたものが空であるかどうかのみを実際にチェックすることに注意してください。HTMLコメントなどの何かが返された場合、チェックはfalseを返します。

于 2016-06-09T18:42:13.970 に答える
1

render_to_stringによって生成された値を変数に格納してみてください。

<% partial_content = render_to_string(partial: 'my_partial', locals: {...} ).strip %>

次に、コンテンツが含まれているかどうかを確認できます。

<% if partial_content.present? %>
  <%= partial_content %>
<% else %>
  <div class="css_for_no_info">
    <%= render something else %>
  </div>
<% end %>
于 2013-02-10T19:52:32.160 に答える