Rails 关于 haml 使用的一个问题

realwol · 2014年03月14日 · 最后由 realwol 回复于 2014年03月16日 · 2709 次阅读
<% @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 实现。

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

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

@users.each_slice(3) do |user|
  # user[0], user[1], user[2]
end

http://haml2erb.herokuapp.com/

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

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

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

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

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

- @users.in_groups_of(3) do |group|
  %tr
    - group.each do |user|
      %td = user.try(:blabla)

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

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

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

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

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

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