我有一个包含推荐信的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