为什么“each”方法在第一个数组值之后停止?

时间:2012-05-29 19:12:07

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个更大的方法,其中一部分我想用来获取数组值并将它们插入到链接中。我正在使用该方法在我正在定制的应用程序的元数据中生成链接字段。完整的方法如下:

def get_facet_from_datastream(resource, datastream_name, field_key, opts={})
  if opts.has_key?(:values)
    values = opts[:values]
  if values.nil? then values = [opts.fetch(:default, "")] end
  else
    values = resource.get_values_from_datastream(datastream_name, field_key, opts.fetch(:default, ""))
  if values.empty? then values = [ opts.fetch(:default, "") ] end
 end

 facet = field_key.to_a.join("_") + "_facet"

 values.each do |v|
   searchv = v.to_s.gsub(/ /, "+")
   link =  "<a href=\"http://development4/lcdl/catalog?f[#{facet}][]=#{searchv}\">#{v}</a>"
   return link.html_safe
 end

end

我在“values.each do”部分遇到了问题。返回链接适用于数组中的第一个值,但在此处停止。我理想的是每个链接后跟一个换行符,但我显然混淆了语法。

我希望这是有道理的。

2 个答案:

答案 0 :(得分:3)

是的,它会停止,因为您的return link.html_safe区块中有each。它返回values数组的第一个值。

更新您的代码部分:

 values.map do |v|
   searchv = v.to_s.gsub(/ /, "+")
   "<a href=\"http://development4/lcdl/catalog?f[#{facet}][]=#{searchv}\">#{v}</a>"
 end.join.html_safe

答案 1 :(得分:1)

每个循环中都有一个return语句。这将退出方法,在第一次传递时返回。

你可能想做这样的事情:

values.map do |v|
  searchv = v.to_s.gsub(/ /, "+")
  link =  "<a href=\"http://development4/lcdl/catalog?f[#{facet}][]=#{searchv}\">#{v}</a>"
  link.html_safe
end.join