Если я пойму, это возможное решение.В качестве примера я использую чистый Ruby и коллекцию хэшей, но легко перенести ее в Rails.
Итак, учитывая коллекцию:
posts = [ {id: 1, pub: true}, {id: 2, pub: false}, {id: 3, pub: true}, {id: 4, pub: true}, {id: 5, pub: true}, {id: 6, pub: false}, {id: 7, pub: true}, {id: 8, pub: true}, {id: 9, pub: true}, {id: 10, pub: true}, {id: 11, pub: true}, {id: 12, pub: true}, {id: 13, pub: false}, {id: 14, pub: true} ]
Использование Enumerable # each_slice и Array # reject :
groups_of_three = posts.each_slice(3).map { |group| group.reject { |h| h[:pub] == false } }
Распечатка для показа результата:
groups_of_three.each { |group| p group }
# [{:id=>1, :pub=>true}, {:id=>3, :pub=>true}]
# [{:id=>4, :pub=>true}, {:id=>5, :pub=>true}]
# [{:id=>7, :pub=>true}, {:id=>8, :pub=>true}, {:id=>9, :pub=>true}]
# [{:id=>10, :pub=>true}, {:id=>11, :pub=>true}, {:id=>12, :pub=>true}]
# [{:id=>14, :pub=>true}]