如何使用Ruby和/或Rails检查数组索引是否存在

6

有没有一种 Ruby(最好是)或 Rails 的方法来检查数组的第二个索引是否存在?

在我的 Rails(4.2.6)应用程序中,我在视图中有以下代码来展示照片数组的前两个缩略图:

<% if array.photos.any? %>
  <%= image_tag array.photos.first.image.url(:thumb) %>
  <%= image_tag array.photos[1].image.url(:thumb) %>
<% end %>

然而,如果数组中没有第二项,则会出现错误。

我尝试了以下if语句来使第二个缩略图的渲染有条件限制,但它们都不起作用:

<% if array.photos.include?(1) %>
<% if array.photos.second? %>
<% if array.photos[1]? %>
<% if array.photos[1].any? %>

我发现另一种获得所需内容的方法是简单地检查数组长度。
但我还在想Ruby(或Rails)是否有一种方法或方式来检查数组中是否存在特定索引。提前致谢!
编辑:为了澄清,我只想显示数组中的前两个缩略图(如果有)。

1
Wenceslao的回答很好。关键在于,在Ruby中,可以安全地访问数组超出其概念大小的部分。例如,对于一个数组a = [1],您可以检查索引,如果没有任何内容,它将返回nil。因此,array.photos[1].nil?是最简单的判断是否有任何内容的方法。 - user483040
2个回答

9
你可以使用 .each 方法,但如果你想按照这种方式进行操作,不要这样做:
<%= image_tag array.photos[1].image.url(:thumb) %>

也许你可以使用这个:
<%= if(!array.photos[1].nil?) image_tag array.photos[1].image.url(:thumb) %>

或者:

<%= image_tag array.photos[1].image.url(:thumb) unless array.photos[1].nil? %>

谢谢,!array.photos[1].nil? 这种方法正是我所需要的。 - Ren
然而,我在行末使用了不同的语法来编写if条件语句。 - Ren

1
这里,为什么不呢

(0...array.photos.size).each do |photo|
    ......
end

array.photos.each do |photo|
    ......
end

因为他正在尝试访问一个不确定是否被占用的特定索引。 - user483040

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接