使用each_slice生成一个表但带有子标题的表

时间:2016-04-20 04:53:41

标签: ruby-on-rails ruby

我使用each_slice输出一个两列表。

我想在迭代元素的属性发生变化时插入标题行。

我有:

$(document).ready(function(){
    var check1=0;
    $("#kategori").bind("keyup change", function(){
    var nama = $(this).val();
    $.ajax({
        url:'cekData/kategori/nama_kategori/'+nama,
        data:{send:true},
        success:function(data){
            if(data==1){
                $("#report1").text("");
                check1=1;
                $('button[type="submit"]').prop('disabled','');
            }else{
                $("#report1").text("*choose another kategori");
                check1=0;
                $('button[type="submit"]').prop('disabled',true);
                }
            }
        });
    });
});

想要像:

all_users = Users.order('category, name asc').all
all_users.each_slice(2) do |two_users|
    <tr>
            <td style="text-align:right">
              <%= two_users[0].category + ' - ' + two_users[0].name %>
            </td>
           <% if two_users[1].present? %>
            <td>
              <%= two_users[1].category + ' - ' + two_users[1].name %>
            </td>
            <td>
            <% else %>
            <td></td>
            <% end %>
    </tr>
<% end %>

在two_users [1]有一个新类别的情况下,这显然不起作用。 我试图避免迭代每个类别和请求的额外SQL查询 每个用户独立。

1 个答案:

答案 0 :(得分:0)

all_users.each_slice(2).with_object({cc: nil}) do |two_users, memo|
  if category = two_users.detect { |u| u.category != memo[:cc] }
    # print additional row or do whatever here
    memo[:cc] = category
  end
end

Enumerable#detect此处返回更改的类别,如果没有更改,则返回nil

Sidenote :尝试DRY

<td>
  <%= two_users[1].name if two_users[1].present? %>
</td>