Rails 关于 haml 使用的一个问题

realwol · 发布于 2014年3月14日 · 最后由 realwol 回复于 2014年3月16日 · 1299 次阅读
4933
<% @users.each_with_index do | user, index| %>
  <% if ( index+1)%3 == 1 %>
    <tr> blabla
  <% end %>
      <td>
        <%= user.blabla %>
      </td>
 <% if ( index+1)%3 == 0 %>
    </tr>
  <% end %>
<% end%>

代码粗鄙。简单来说,array @users里边的数据三个一组放在tr里,这个逻辑怎么用haml实现。

共收到 15 条回复
1573
nightire · #1 · 2014年3月15日

其实不用表格就非常简单了。

4933
realwol · #2 · 2014年3月15日

#1楼 @nightire 这个是js里要用到的三个一排的轮显,标签好像固定的。复杂与否我觉得不是问题,我发帖的原因是好像haml在实现这种逻辑的时候有个坑。或者这种问题haml团队知道了,有了特殊的解决方法而我不知道,所以来求教。

2474
kabie · #4 · 2014年3月15日 1 个赞
@users.each_slice(3) do |user|
  # user[0], user[1], user[2]
end
67
_samqiu · #5 · 2014年3月15日

http://haml2erb.herokuapp.com/

楼主先把这个链接收藏起来,以后应该会用到的 :D

4933
realwol · #6 · 2014年3月15日

#4楼 @Kabie 我说的问题的点不在ruby语法上,而在haml语法上。不过你给的方法确实是能解决这个问题,非常感谢。

4933
realwol · #7 · 2014年3月15日

#5楼 @_samqiu 恩,非常感谢,很实用。

4933
realwol · #8 · 2014年3月15日

#3楼 @kingwkb 确实,这个可以,不过还是觉得这是haml的坑

449
victor · #9 · 2014年3月16日

#8楼 @realwol 如果不用 haml 改用普通的 erb 或者 slim 对你写出一样的逻辑是否有帮助呢?如果没有帮助,那么能否换一个角度来想问题。并不是 haml 的错,这部分本身就不该由 haml 负责,它只是帮我们用 ruby 更简单的来实现 html 这个标记语言。

1
Rei · #10 · 2014年3月16日 1 个赞
- @users.in_groups_of(3) do |group|
  %tr
    - group.each do |user|
      %td = user.try(:blabla)
1
Rei · #11 · 2014年3月16日

我想,顶楼的方法如果 @users 数量不是刚好3的倍数,是不是最后有个 tr 不闭合?

4933
realwol · #12 · 2014年3月16日

#9楼 @Victor 确实是这样,不过如果能完美简化不是更好么。

4933
realwol · #13 · 2014年3月16日

#11楼 @Rei 在判断tr结尾的时候就要加上end判断,这样代码越写越多。

449
victor · #14 · 2014年3月16日

#12楼 @realwol 世界上哪存在完美啊。#4 和 #11 楼的方法都行,可以把这部分抽取出来,当做一个 helper,这样 haml 看起来干净许多,看起来心情也能好点。

4933
realwol · #15 · 2014年3月16日

#14楼 @Victor 是哦,就用each写的时候觉得怎么写都不对。感觉有点杠上的味道。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册