0

2 つの変数のうち少なくとも 1 つが true の場合に実行される単純なステートメントがあります。私が抱えている問題は、両方の変数が true の場合、ステートメントが 2 回実行されることです。一度だけ実行する必要があります。

<% if intensity == "true" || @planned_intensity == "true" %>
  <div class="red_dot"></div>
<% end %>

ここで明らかな何かが欠けていますか?両方の変数が true の場合、2 つの赤い点が表示されます。

//編集

別の場所にあるようですが、問題が見つからないようです。ブロック全体は次のとおりです。

<% LogEntry.cal_entry(entry_date.to_date, @athlete.id).each do |entry| -%>
  <% workouts = entry.workouts -%>
  <% workouts.each do |workout| -%>
    <% @planned_intensity = false %>
    <% planned_workouts = workout.planned_workouts -%>
    <% planned_workouts.each do |pworkout| -%>
      <% @planned_times = pworkout.planned_workout_times -%>
      <% @planned_times.each do |planned_time| -%>
        <% if planned_time.zone > 1 %>
          <% @planned_intensity = true %>
        <% end %>
      <% end %>
    <% end %>

  <% completed_workouts = workout.completed_workouts -%>
  <% completed_workouts.each do |completed_workout| -%>
    <li id="<%= workout.id.to_s() %>">
    <% completed_workout.workout_times.each do |time| -%>
      <% intensity = "true" %>
      <% if time.zone > 1 %>
        <% intensity = true %>
      <% else %>
        <% intensity = false %>
      <% end %>
      <% if intensity == "true" || @planned_intensity == true %>
          <div class="red_dot"></div>
        <% end %>
    <% end %>
      <%= link_to_coaches_dialog workout.activity_id, entry.id.to_s(), "edit", "cal", @athlete.id.to_s, workout.id.to_s(), entry_date.to_date.to_s() %>
      <% total_duration = 0 %>
      <% completed_workout.workout_times.each do |workout_time| -%>
        <% total_duration += workout_time.duration %>
      <% end -%>
      <% total_planned_duration = 0 %>
      <% @planned_times.each do |planned_time| %>
        <% total_planned_duration += planned_time.duration %>
      <% end %>
      <%= time_cleanup(total_duration/60) %>
      <% unless total_planned_duration == 0 %>
      <span class="smaller"> / 
      <%= time_cleanup(total_planned_duration/60) %></span>
      <% end %>
    </li>
  <% end -%>
  <% end -%>
<% end -%>
4

1 に答える 1

2

これを見ただけでは、赤い点が 2 回表示される原因を正確に特定するのは困難です。包含ループが 2 回実行されていると想像できますが、workout_times.

本当の問題は、このビュー コードでintensityとの値を設定していることです。@planned_intensityモデルまたはコントローラーでこのようなロジックを実際に実行する必要があります。このレイヤー (HTML ビュー テンプレート) は、プレゼンテーション用です。分離の理由は、このようなバグを特定するのが難しくならないようにするためです:)

ビューがオブジェクトのメソッドを呼び出すようにリファクタリングしworkout_timeて、ロジックがこのメソッドにあるようにします。少なくとも、どこを見ればよいかがわかります。このメソッドを単体テストすることもできますが、このビューをテストするのは面倒です。

現在、どのモデルをお持ちですか?workoutandが必要だと思います。次に、モデルにandメソッドをworkout_time追加し、 にメソッドを追加します。completed?planned?workouthas_intensity?workout_time

于 2013-07-14T17:51:39.000 に答える