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

是的,在循环之前启动它并使用 << 运算符追加。以 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 回答