我在Rails中写这个,但我怀疑逻辑不是特定于Rails的 - 我有一个条目列表,它们都是两种类型之一,照片和视频。
目前我有一个以反向日期顺序在列表中运行的循环,输出两种类型的混合。下面是我的循环示例,它不是实际代码,但逻辑是相同的:
post_count = 1
if post_count < 2
if post.type == 'photo'
<div>post.title</div>
post_count = post_count + 1
end
else
if post.type == 'photo'
<div>post.title</div>
post_count = post_count + 1
elsif post.type == 'video'
<div>post.embed_code</div>
post_count = post_count + 1
end
end
这接近我想要的,因为我想要将这两种类型混合到一定程度,但我想知道是否可以让循环拉出前两个照片条目并首先渲染它们,然后正常输出列表的其余部分,包括列表中较早出现的所有视频条目。
这对我来说听起来有点令人费解,所以这是一个图表,右边有所需的结果:
提前致谢。
答案 0 :(得分:1)
嗯,不确定这是不是你想要的,但看看:
@posts.select{ |post| post.type == 'photo' }.first(2).each do |photo_post|
@posts.delete_if{ |post| post == photo_post }
# display photo_post
# <div>post.title</div>
@posts.each do |post|
post.try(:title) || post.try(:embed_code)
此代码假设@posts
是按照您的意愿排列的照片/视频列表(按日期排序)。它不应该支持nil
个案例。