Rails 상에서 haml에서 if를 사용해서 2개씩 끊어서 .row 값을 부여할 때, 아래 결과와 같이 인덴트 문제가가 발생한다. 자식으로 들어가야하는데, 형제 노드로 들어간다. 해결하기 위해서 else 밑의 부분을 한 번더 인덴트를 넣고 싶지만 그러면 인덴트 에러가 발생한다. 아… haml 이 싫어지는 시점.

- @result.each_with_index do |project, index|
    - if index % 2 == 0 
        .row
            %div
                test
    - else 
        %div
            test

결과 HTML

<div class="row">
    <div>
    test
    </div>
</div>
<div>
    test
</div>


해결 방법은 in_groups_of(number, fill_with = nil) 메소드를 사용해서 그룹으로 나누는 것이다. 배열을 지정한 갯수만큼 그룹으로 나눠서 계산을 하게 된다. 그러면 코드도 좀 더 깔끔해지고 자식 노드로 잘 들어간다.

- @result.in_groups_of(2, false) do |project_group|
  .row
      - project_group.each do |project|
            %div
                test

결과 HTML

<div class="row">
    <div>
        test
    </div>
    <div>
        test
    </div>
</div>

참조 : HAML indentation problem IF

http://apidock.com/rails/Array/in_groups_of

%w(1 2 3 4 5 6 7 8 9 10).in_groups_of(3) {|group| p group}
["1", "2", "3"]
["4", "5", "6"]
["7", "8", "9"]
["10", nil, nil]

%w(1 2 3 4 5).in_groups_of(2, '&nbsp;') {|group| p group}
["1", "2"]
["3", "4"]
["5", "&nbsp;"]

%w(1 2 3 4 5).in_groups_of(2, false) {|group| p group}
["1", "2"]
["3", "4"]
["5"]


Posted by KraZYeom

댓글을 달아 주세요