首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当两个变量都为真时,ruby OR语句执行两次

当两个变量都为真时,ruby OR语句执行两次
EN

Stack Overflow用户
提问于 2013-07-15 01:07:40
回答 1查看 116关注 0票数 0

我有一个简单的语句,如果两个变量中至少有一个为真,它就会执行。我遇到的问题是,如果两个变量都为真,语句就会执行两次。我只需要它执行一次。

代码语言:javascript
运行
复制
<% if intensity == "true" || @planned_intensity == "true" %>
  <div class="red_dot"></div>
<% end %>

我是不是漏掉了什么明显的东西?在两个变量都为真的情况下,我得到两个红点。

//编辑

它似乎在其他地方,但我似乎找不到问题所在,这里是整个区块:

代码语言:javascript
运行
复制
<% 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 -%>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-15 01:51:39

从这张图上很难看出到底是什么原因导致红点出现两次。我假设包含循环运行了两次,但是我们不知道workout_times中有什么数据。

真正的问题是,您在此视图代码中设置了intensity@planned_intensity的值。您真的应该在模型或控制器中执行这样的逻辑。这一层(HTML视图模板)仅用于表示。分离的原因是这样您就不会很难找出像这样的bug :)

我进行了重构,以便视图调用workout_time对象上的方法,这样逻辑就在这个方法中。至少这样你就知道该去哪里找了。您还可以对此方法进行单元测试,而测试此视图将非常困难。

你们现在有什么型号的?我想您应该有workoutworkout_time,然后在workout模型上添加completed?planned?方法,在workout_time上添加has_intensity?方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17641627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档