array.select不遍历每个元素

时间:2019-05-20 03:08:27

标签: ruby-on-rails ruby

我有一个rails控制器,并且此代码仅循环通过metrics数组中的第一个元素?为什么会这样?

# /metrics/:id
def values
  @metric = metrics.select do |metric|
    id = metric['href'].split('/').last
    p "id == params[:id] = #{id == params[:id]}" # false on the first iteration (but never gets to the next iteration
    return id == params[:id]
  end
  p "HERE?" # We never get here!
end

1 个答案:

答案 0 :(得分:2)

您需要从您的方法中删除return语句,Ruby使用隐式返回(请参见https://jtrudell.github.io/blog/ruby_return_values/),因此block的结果是该语句中最后评估的行块,您的代码中的return语句将被视为return方法中的values。您的方法应类似于:

def values
  @metric = metrics.select do |metric|
    metric['href'].split('/').last == params[:id]
  end
end