Rails - 基于if语句的小计

时间:2017-05-09 17:17:56

标签: ruby-on-rails subtotal

<h1> What it looks like currently</h1><br>

<table>
 <thead>
    <tr>
      <th>Month</th>
      <th>Month Total</th>
      <th>Written</th>
      <th>Verbal</th>
      <th>Probable 75%</th>
      <th>Probable 25%</th>
      <th>Speculative</th>
      <th colspan="3"></th>
    </tr>
  </thead>
  <tbody>
  <tr><td>Jan 2017</td> <td>50</td><td>0</td><td>50</td><td>0</td><td>0</td><td>0</td></tr>
 <tr> <td>Feb 2017</td> <td>100</td><td>0</td><td>100</td><td>0</td><td>0</td><td>0</td></tr>
  <tr><td>Mar 2017</td>  <td>700</td><td>0</td><td>700</td><td>0</td><td>0</td><td>0</td></tr>
  <tr><td>Jan 2017</td>  <td>700</td><td>700</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
 <tr><td>Feb 2017</td>  <td>5000</td><td>5000</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
  <tr><td>Jan 2017</td> <td>500</td><td>0</td><td>0</td><td>500</td><td>0</td><td>0</td></tr>
  <tr><td>Jan 2017</td> <td>5000</td><td>0</td><td>0</td><td>0</td><td>0</td><td>5000</td></tr>
  </tbody>
  </table>
  
  <h1> What I need it look like </h1><br>

<table>
 <thead>
    <tr>
      <th>Month</th>
      <th>Month Total</th>
      <th>Written</th>
      <th>Verbal</th>
      <th>Probable 75%</th>
      <th>Probable 25%</th>
      <th>Speculative</th>
      <th colspan="3"></th>
    </tr>
  </thead>
  <tbody>
  <tr><td>Jan 2017</td> <td>1250</td><td>700</td><td>50</td><td>500</td><td>0</td><td>5000</td></tr>
 <tr> <td>Feb 2017</td> <td>5100</td><td>5000</td><td>100</td><td>0</td><td>0</td><td>0</td></tr>
  <tr><td>Mar 2017</td>  <td>700</td><td>0</td><td>700</td><td>0</td><td>0</td><td>0</td></tr>
    </tbody>
  </table>
  

我是一个编码菜鸟,所以我可能会以错误的方式解决这个问题,但到目前为止,我已经糊里糊涂了......直到现在。

我需要的是对月份进行小计,以便所有值都显示在相关行中:Here

我用的代码是:`

      <% @months.each do |t| %>

 <tr>
      <td><%= t.monthYear %> </td> <td><%= t.monthValue %></td> 
      <% if(t.destination.status == "Written") %>
      <td><%= t.monthValue %></td>

      <% else %>
      <td>0</td>
      <% end %>
      <% if(t.destination.status == "Verbal") %>
      <td><%= t.monthValue %></td>
      <% else %>
      <td>0</td>
      <% end %>
      <% if(t.destination.status == "Probable 75%") %>
      <td><%= t.monthValue %></td>
      <% else %>
      <td>0</td>
      <% end %>
      <% if(t.destination.status == "Probable 25%") %>
      <td><%= t.monthValue %></td>
      <% else %>
      <td>0</td>
      <% end %>
      <% if(t.destination.status == "Speculative") %>
      <td><%= t.monthValue %></td>
      <% else %>
      <td>0</td>
      <% end %> 




  </tr>

&lt;%end%&gt;`

模特:

目标

class Destination < ActiveRecord::Base
belongs_to :tag
has_many :months

月:

class Month < ActiveRecord::Base
    belongs_to :destination
    belongs_to :tag
end

这几个月有3个字段:monthYear,monthValue&amp;目的地代号。
目的地有状态和其他我认为不相关的。

我一直在寻找和使用:
% @months.select(:monthYear, :monthValue, :destination_id).group(:monthYear).each do |t| %>和不同的变体,包括尝试总结:monthValue但最终得到:Subtotaled months but not values.

提前致谢!

1 个答案:

答案 0 :(得分:0)

所以我想出来了,但答案绝对不是很好!我很欣赏这可以做得更清楚,但我已经糊里糊涂了!这是我使用的代码和结果:

查看

  <tbody>
<% @months.group(:monthYear).each do |z| %>

      <% this_thing = 0 %>
      <% this_thing2 = 0 %>
      <% this_thing3 = 0 %>
      <% this_thing4 = 0 %>
      <% this_thing5 = 0 %>

     <% @testing.each do |b| %>  

         <% if (z.monthYear == b.monthYear) && (b.destination.status == "Written") %>
           <%  this_thing =  this_thing + b.monthValue %>
         <% end %>


         <% if (z.monthYear == b.monthYear) && (b.destination.status == "Verbal") %>
             <%  this_thing2 =  this_thing2 + b.monthValue %>
         <% end %>


         <% if (z.monthYear == b.monthYear) && (b.destination.status == "Probable 75%") %>
             <%  this_thing3 =  this_thing3 + b.monthValue %>
         <% end %>


         <% if (z.monthYear == b.monthYear) && (b.destination.status == "Probable 25%") %>
              <%  this_thing4 =  this_thing4 + b.monthValue %>
         <% end %>

         <% if (z.monthYear == b.monthYear) && (b.destination.status == "Speculative") %>
            <%  this_thing5 =  this_thing5 + b.monthValue %>
         <% end %>

       <% end %>
       <td><%=z.monthYear %></td>
       <td><%= this_thing + this_thing2 + this_thing3 + this_thing4 + this_thing5 %> </td>
       <td><%= this_thing %></td>
       <td><%=  this_thing2 %></td>
       <td><%=  this_thing3 %></td>
       <td><%=  this_thing4 %></td>
       <td><%=  this_thing5 %></td>
       <td><%= (this_thing * 1)+(this_thing2 * 1)+(this_thing3 *0.75)+(this_thing4 * 0.25)+(this_thing5 * 0)%></td>
</tr>
<% end %>
 </tbody>

标记控制器

def index
@months = Month.all
@testing = Month.joins(:destination).includes(:destination).select("months.monthYear, months.monthValue, destination_id, destinations.status")

end

最终结果!

Sexy AF