我有一个包含推荐信的yaml序列,我想在一些地方完整循环,但在其他地方仅部分循环简而言之,如何在haml中选择并遍历yaml序列中的特定项?
下面的例子被去掉了
我的yaml数据

# testimonials.yml

-
  name: 'Jill'
  quote: 'An unbelievable experience!'
  photo: 'jill.jpg'
-
  name: 'Jack'
  quote: 'I unreservedly recommend this programme'
  photo: 'jack.jpg'
-
  # ... etc

基本工作哈姆环
-# about.html.haml

- data.testimonials.each do |testimonial|
  %div
    %img{ :src => testimonial.photo }
    %p= testimonial.name
    %p= testimonial.quote

我要达到的目标
不过,在另一部分中,我只想循环浏览序列中的特定证明,例如[0, 4, 7]。我天真地认为,这类似于在循环之外选择特定的序列项,例如%p= data.testimonials[0].name,如下所示:
- data.testimonials[0, 4, 7].each do |testimonial|
  %div
    %img{ :src => testimonial.photo }
    %p= testimonial.name
    %p= testimonial.quote

然而。。。这将返回“错误的参数数目”错误,因为该方法似乎只接受序列/数组中的单个范围,例如testimonials[4, 7](或[4..7]2..2等)。
问题
有没有办法将多个范围传递到这个循环中,例如[0..2 && 4..7](这不起作用,但你得到了我的漂移)或者,这是实现这个结果的推荐方法吗也就是说,是否有一种标准和更有效的方法来选择和遍历yaml序列中的特定项(或范围)?
注意
我觉得select方法in this post(粘贴在下面)包含了答案但我可能错了,我不知道怎么用它。。。
选择
(要避免的别名:find_all)
当需要过滤(即“选择”)多个值时非常有用。
[1, 2, 3, 4].select { |e| e % 2 == 0 } # returns [2, 4]
为了测试,我尝试将上面的代码转换为- data.testimonials.select do |testimonial| testimonial == 1,它只返回整个序列,以及- data.testimonial.select {|testimonial| testimonial == 1},它返回语法错误…

最佳答案

您也可以使用这个Array#values_at
如。

- data.testimonials.values_at(0, 4, 7).each do |testimonial|
  %div
    %img{ :src => "#{testimonial.photo}" }
    %p= testimonial.name
    %p= testimonial.quote

10-04 21:13