0

私はそのようなコードを持っています:

  def accum_search

    if params[:akbcap].present?
      akbcap_array = [12,18,19,20,25,30,35,36,38,40,41,42,44,45,46,47,50,52,53,54,55,56,58,60,61,62,63,64,65,66,68,69,70,71,72,74,75,77,80,85,88,90,91,92,95,98,100,102,110,115,120,125,130,135,140,170,180,185,190,192,200,210,220,225]
      min, max = params[:akbcap].split('-').map {|s| s.to_i }
      logger.warn("!@!!!!!!!!!!!! AAA !!!!!!!!!!")
      logger.warn(min)
      logger.warn(max)
      caprange = min...max
      sa = akbcap_array.select {|n| caprange.include? n }
      #@cross = OtherProductsCrossList.find(:all, :conditions => {:cross_value => 1})
      cap = "*"+params[:akbcap]+"*"
      sa.each do |s|
        logger.warn(s)
        @accums = Accumulator.by_capacity(s).by_size(params[:akbsize]).by_brand(params[:akbbrand])
      end
    else      
      @accums = Accumulator.by_capacity(50).by_size(params[:akbsize]).by_brand(params[:akbbrand])
    end
  end

ご覧のとおり、私はそのような部分を持っています:

sa.each do |s|
            logger.warn(s)
            @accums = Accumulator.by_capacity(s).by_size(params[:akbsize]).by_brand(params[:akbbrand])
          end

しかし、検索からの @accums データのすべての反復を追加できますか? 今では最後の値があります(配列を介して行うことができます...しかし、クラス変数を介して行うにはどうすればよいですか?

4

1 に答える 1

1

はい、ループの前に開始し、 << 演算子を使用して追加します。1 次元配列にするために flatten で終了します。

@accums = []
# ...
sa.each do |s|
  @accums << Accumulator.several_method_calls......
end
@accums.flatten!

またはコンパクトさのために:

result = sa.map{|s| Accumulator.several_method_calls...... }.flatten
于 2012-12-08T20:04:59.787 に答える