2012-05-29 67 views
0

我有一個更大的方法,我想用它來取數組值並將它們插入到鏈接中。我正在使用該方法在我自定義的應用的元數據中生成鏈接字段。完整的方法如下:爲什麼「每個」方法在第一個數組值之後停止?

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」一節中的問題。返回鏈接對陣列中的第一個值起作用,但是停止。我最喜歡的是每個鏈接後跟一個換行符,但我顯然混淆了語法。

我希望這是有道理的。

+0

你的代碼味道在許多地方。無論如何,你是否希望你的方法返回一個包含由換行符分隔的鏈接標籤的字符串? –

回答

3

是的,它會停止,因爲您的each區塊中有return link.html_safe。它返回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 
+0

這是爲我做的。謝謝! – librarion

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 
相關問題