在循环表rails中使用if语句

时间:2012-09-17 16:57:25

标签: ruby-on-rails ruby

我有两个模特,一个有卡片,另一个有相关的奖励计划。我在一些表中显示了所有这些,并在某些列中使用了条件if语句,但我无法弄清楚为什么if else语句搞砸了我的列。我发布了两个有效的例子和一个没有的例子。我需要第二个工作来添加一些额外的功能

此示例有效

   <table>
    <tr>
        <th>Card</th>
        <th>General Rewards</th>
        <th>Gas Amount</th>
        <th>Movies Amount</th>
        <th>Museums Amount</th>
        <th>Theme Park Amount</th>
        <th>Restaurant Amount</th>
        <th>Department Store Amount</th>
    </tr>

    <% @cards.each do |card| %>
    <tr>
        <td><%= card.name %></td>
        <td><%= card.general_rate %> </td>
        <% card.rewards.each do |category| %>
        <% if category.name.downcase == "gas" %>
        <td><%= category.threshold_check(@gas) %></td>
        <% end %> 
        <% if category.name.downcase == "movies" %>
        <td><%= category.threshold_check(@movies) %></td>
        <% end %> 

        <% if category.name.downcase == "museums" %>
        <td><%=  category.threshold_check(@museums) %></td>
        <% end %> 
        <% if category.name.downcase == "theme parks" %>
        <td><%=  category.threshold_check(@theme_parks) %></td>
        <% end %> 
        <% if category.name.downcase == "restaurants" %>
        <td><%=  category.threshold_check(@restaurants) %></td>
        <% end %> 
        <% if category.name.downcase == "department stores" %>
        <td><%=  category.threshold_check(@department_stores) %></td>
        <% end %> 
        <% end %>
    </tr>
    <% end %>
</table>

这会在末尾添加额外的列

    <table>
    <tr>
        <th>Card</th>
        <th>General Rewards</th>
        <th>Gas Amount</th>
        <th>Movies Amount</th>
        <th>Museums Amount</th>
        <th>Theme Park Amount</th>
        <th>Restaurant Amount</th>
        <th>Department Store Amount</th>
    </tr>

    <% @cards.each do |card| %>
    <tr>
        <td><%= card.name %></td>
        <td><%= card.general_rate %> </td>
        <% card.rewards.each do |category| %>
        <td><%= category.name.downcase == "gas" ? category.threshold_check(@gas) : 0 %></td>
        <td><%= category.name.downcase == "movies" ? category.threshold_check(@movies) : 0 %></td>
        <td><%= category.name.downcase == "museums" ? category.threshold_check(@museums) : 0 %></td>
        <td><%= category.name.downcase == "theme parks" ? category.threshold_check(@theme_parks) : 0 %></td>
        <td><%= category.name.downcase == "restaurants" ? category.threshold_check(@restaurants) : 0 %></td>
        <td><%= category.name.downcase == "department stores" ? category.threshold_check(@department_stores) : 0 %></td>
        <% end %>
    </tr>
    <% end %>
</table>

1 个答案:

答案 0 :(得分:0)

如果您发现两个版本之间的主要区别在于第一个版本如果您的条件不合规,则不会发出<td></td>

另一方面,无论条件是否为真,你的第二个版本都有<td></td>。 也许这可能是你额外专栏的来源。

P.S。在您的第一个示例中,我认为您有一个拼写错误但<%= category.threshold_check(@movies) %>没有开头<td>而且它的结束</td>在if语句之外。