我有一个网站,客户希望记录显示在两列中。我创建了几个范围,并在页面上设置一列返回奇数记录,另一列返回偶数记录。
这些是我的范围:
scope :odd, -> { where("id % 2 = ?", "0") }
scope :even, -> { where("id % 2 = ?", "1") }
似乎正在工作,但是:a)这是正确/安全的语法吗?b) 有没有更简单的方法来选择奇数和偶数 ID 号?
我有一个网站,客户希望记录显示在两列中。我创建了几个范围,并在页面上设置一列返回奇数记录,另一列返回偶数记录。
scope :odd, -> { where("id % 2 = ?", "0") }
scope :even, -> { where("id % 2 = ?", "1") }
似乎正在工作,但是:a)这是正确/安全的语法吗?b) 有没有更简单的方法来选择奇数和偶数 ID 号?
虽然 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: //jsfiddle.net/KnXEc/
更多:http ://csswizardry.com/2010/02/mutiple-column-lists-using-one-ul/
由于无论如何您都在显示所有记录,因此您可以使用Enumerable#partition
:
@even_ids, @odd_ids = Record.all.partition { |r| r.id.even? }
如果通过奇数和偶数 id 获取记录确实是您想要做的,那么您的解决方案很好。AFAIK 没有捷径,因为它不经常完成。
您应该考虑的一件事是,一旦您开始删除记录,列可能会变得不平衡。不过,这对您来说可能不是问题。