Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按类型对循环中的条目排序_Ruby On Rails_Loops - Fatal编程技术网

Ruby on rails 按类型对循环中的条目排序

Ruby on rails 按类型对循环中的条目排序,ruby-on-rails,loops,Ruby On Rails,Loops,我在Rails中写这篇文章,但我怀疑逻辑不是Rails特有的——我有一个条目列表,它们都是两种类型之一,照片和视频 目前,我有一个循环以相反的日期顺序在列表中运行,输出两种类型的混合。下面是我的循环示例,它不是实际代码,但逻辑是相同的: post_count = 1 if post_count < 2 if post.type == 'photo' <div>post.title</div> post_count = post_

我在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
post\u计数=1
如果post_计数小于2
如果post.type==“照片”
职务
post_计数=post_计数+1
结束
其他的
如果post.type==“照片”
职务
post_计数=post_计数+1
elsif post.type==“视频”
post.u代码
post_计数=post_计数+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.select{| post | post.type=='photo'}。首先(2)。每个都做| photo | post|
@posts.delete_if{| post | post==photo_post}
#显示照片
#职务
@posts.每个do | post|
post.try(:title)| post.try(:嵌入代码)

此代码假定
@posts
是根据您的意愿(通常按日期)排序的照片/视频列表。它不应该支持
nil
案例。

太棒了!这正是我所需要的,我所做的就是使用前两行取出前两个照片条目,将它们存储在新数组中,然后从原始数组中删除它们。然后,我将新数组和原始数组组合在一起,这给了我想要的顺序。非常感谢你!