我有一个包含推荐的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
一个基本的工作haml循环
-# 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
方法(粘贴在下面)包含答案......但我可能错了,我不知道如何使用它...
select
(别名以避免: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