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「 」セクションで問題が発生しています。リンクを返すことは、配列の最初の値で機能しますが、それで停止します。私が理想的に望んでいるのは、各リンクの後に改行が続くことですが、私は明らかに構文を混乱させています。

これが理にかなっていることを願っています。

4

2 に答える 2

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
于 2012-05-29T19:13:56.710 に答える
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
于 2012-05-29T19:16:43.073 に答える