0

我在 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

这接近我想要的,因为我希望这两种类型在一定程度上混合,但我想知道是否有可能让循环拉出前两个照片条目并首先渲染它们,然后输出其余的列表中的正常内容,包括之前可能出现在列表中的任何视频条目。

这对我来说听起来有点令人费解,所以这是一个图表,右侧是所需的结果:

列表

提前致谢。

4

1 回答 1

1

Hmm not sure if it is what you are looking for, but take a look:

@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)

This code assume that @posts is a list of Photos/Videos ordered as your wishes (by date in general). It should not support the nil cases.

于 2012-11-26T17:15:50.273 回答