我有一个网站,客户希望记录显示在两列中。我创建了几个范围,并在页面上设置一列以返回奇数记录,另一列返回偶数记录。
scope :odd, -> { where("id % 2 = ?", "0") }
scope :even, -> { where("id % 2 = ?", "1") }
看起来有效但是:a)这是正确/安全的语法吗? b)是否有更简单的方法来选择奇数和偶数ID?
答案 0 :(得分:2)
虽然可以使用ruby解决方案,但使用CSS更为合适。这是因为您的功能主要是演示问题。
为了进一步指出我要问的区别,如果客户回来并希望进行四列显示怎么办?
实现以下显示
record 1 | record 2
record 3 | record 4
record 5 | record 6
<强> HTML 强>
<ul id="double">
<li>CSS</li>
<li>XHTML</li>
<li>Semantics</li>
<li>Accessibility</li>
<li>Usability</li>
<li>Web Standards</li>
<li>PHP</li>
<li>Typography</li>
<li>Grids</li>
<li>CSS3</li>
<li>HTML5</li>
<li>UI</li>
</ul>
<强> CSS 强>
ul{
width:600px;
margin-bottom:20px;
overflow:hidden;
border-top:1px solid #ccc;
}
li{
line-height:1.5em;
border-bottom:1px solid #ccc;
float:left;
display:inline;
}
#double li { width:50%;} /* 2 col */
#triple li { width:33.333%; } /* 3 col */
#quad li { width:25%; } /* 4 col */
#six li { width:16.666%; } /* 6 col */
更多:http://csswizardry.com/2010/02/mutiple-column-lists-using-one-ul/
答案 1 :(得分:0)
如果通过奇数和偶数ID获取记录确实是您想要做的,那么您的解决方案就可以了。 AFAIK没有它的捷径,因为它不常用。
您应该考虑的一件事是,一旦开始删除记录,列可能会变得不平衡。不过,这可能不是你的担忧。
答案 2 :(得分:0)
由于您仍在显示所有记录,因此可以使用Enumerable#partition
:
@even_ids, @odd_ids = Record.all.partition { |r| r.id.even? }