Ruby 如何使用haml循环通过yaml序列中的选定项

Ruby 如何使用haml循环通过yaml序列中的选定项,ruby,yaml,haml,Ruby,Yaml,Haml,我有一个yaml序列,其中包含我希望在某些地方完整循环的推荐信,但在其他地方仅部分循环。简单地说,在haml中如何选择和循环yaml序列中的特定项 下面的例子被剥离回来 我的yaml数据 一种基本的haml回路 我想要达到的目标 然而,在另一节中,我只想循环查看序列中的特定证明,例如[0,4,7]。我天真地认为,这类似于在循环之外选择特定的序列项,例如%p=data.commentials[0]。名称,如: - data.testimonials[0, 4, 7].each do |testim

我有一个yaml序列,其中包含我希望在某些地方完整循环的推荐信,但在其他地方仅部分循环。简单地说,在haml中如何选择和循环yaml序列中的特定项

下面的例子被剥离回来

我的yaml数据

一种基本的haml回路

我想要达到的目标

然而,在另一节中,我只想循环查看序列中的特定证明,例如[0,4,7]。我天真地认为,这类似于在循环之外选择特定的序列项,例如%p=data.commentials[0]。名称,如:

- data.testimonials[0, 4, 7].each do |testimonial|
  %div
    %img{ :src => testimonial.photo }
    %p= testimonial.name
    %p= testimonial.quote
然而。。。这将返回一个“错误的参数数”错误,因为该方法似乎只接受序列/数组中的单个范围,例如推荐[4,7]或[4..7],2..2等

问题:

有没有办法将多个范围传递到这个循环中,例如[0..2&&4..7]这不起作用,但你明白我的意思了吗?或者,这甚至是实现这一结果的推荐方法吗?也就是说,是否有一种标准且更有效的方法来选择和循环yaml序列中的特定项目或范围

我觉得下面粘贴的select方法包含了答案。。。但我可能错了,我不知道如何使用它

挑选 要避免的别名:查找所有 当您需要筛选(即“选择”多个值)时非常有用。 [1,2,3,4]。选择{e{e%2==0}返回[2,4]

为了进行测试,我尝试将上面的内容转换为-data.esticionals.select do | esticional | esticional==1,它只返回整个序列,以及-data.esticional.select{| esticional | esticional==1},它返回语法错误…

use

您可以使用它来提取给定索引号的值,并仅循环这些值,而不是循环所有元素。 例如:

使用

您可以使用它来提取给定索引号的值,并仅循环这些值,而不是循环所有元素。 例如:


将每个_与将传递元素及其索引的_索引一起使用,然后在块中执行if[2,6,9]。是否包括?要检查的索引

使用每个带有将传递元素及其索引的索引的索引,然后在块中执行if[2,6,9]。是否包括?要检查的索引

您也可以使用此

例如

你也可以用这个

例如


杰出的作品perfectly@eagobe:很高兴为您效劳。作品perfectly@eagobe:很高兴能帮上忙这也行。我还没见过你。这仅仅是上述两个答案的一个替代方案,还是在某种程度上是有益的?我可以看到它只对应于“整数索引或范围”,这似乎适合于yaml序列项,因为它们只是that@eagobe值的好处在于,您将只获得给定索引的数组,这样您就不需要遍历数组的所有项,而在其他答案中,整个数组将循环通过,它将检查每个元素的给定条件。这同样有效。我还没见过你。这仅仅是上述两个答案的一个替代方案,还是在某种程度上是有益的?我可以看到它只对应于“整数索引或范围”,这似乎适合于yaml序列项,因为它们只是that@eagobe值的好处在于,您将只获得给定索引的数组,这样您就不需要遍历数组的所有项,而在其他答案中,整个数组将循环通过,它将检查每个元素的给定条件。
-# about.html.haml

- data.testimonials.each do |testimonial|
  %div
    %img{ :src => testimonial.photo }
    %p= testimonial.name
    %p= testimonial.quote
- data.testimonials[0, 4, 7].each do |testimonial|
  %div
    %img{ :src => testimonial.photo }
    %p= testimonial.name
    %p= testimonial.quote
- data.testimonials.each_with_index do |testimonial, index|
  - if [0, 4, 7].include? index
    %div
      %img{ :src => testimonial.photo }
      %p= testimonial.name
      %p= testimonial.quote
> array = ["a", "b", "c", "d", "e", "f", "g", "h"] 
> array.values_at(0, 4, 7)
#=> ["a", "e", "h"]
- data.testimonials.values_at(0, 4, 7).each do |testimonial|
  %div
    %img{ :src => "#{testimonial.photo}" }
    %p= testimonial.name
    %p= testimonial.quote