0

现在我有这样的事情:

  @bysParks = Array.new
  @nonBysParks = Array.new
  @bysMatch = Array.new
  @nonBysMatch = Array.new

  @parks = Park.find(:all,:conditions => ["name like ?" + queryString,parkname])
  @parks.each do |park|

  match = 5; #in reality this is some count * query

   if park.bys_park == true
     @bysParks << park
     @bysMatch << match
   else
     @nonBysParks << park
     @nonBysMatch << match
   end

  end #for each park

最好将匹配包含在对象或“结构”数组中,@bysParks这样@nonBysParks我就不必像这样创建并行数组。

编辑:目标是避免制作@bysMatch@nonBysMatch数组,并将信息包含在 park 对象中,以便它可以与 BYSparks 数组一起传递。

4

1 回答 1

1

你的问题有点令人困惑,但我相信你是说你想拉一些公园,并且你想为每个公园理想地分配一个值给一个名为的属性match并将结果存储在一个数组中?

所以你可以做的就是添加一个属性Park

class Park < ActiveRecord::Base
  attr_accessor :match
end

那么你上面的代码可能是这样的:

@parks = Park.find(:all,:conditions => ["name like ?" + queryString,parkname])
@parks.each do |park|
  match = 5 # or however you are getting match
  park.match = match # You can combine this with the line above.
  if park.bys_park
    @bysParks << park
  else
    @nonBysParks << park
  end
end

更好的是,尽管您可以使用更好更紧凑的 ruby​​。

@parks = Park.find(:all,:conditions => ["name like ?" + queryString,parkname])
@parks.each {|p| p.match = 5}
@bysParks, @nonBysParks = @parks.partition {|p| p.bys_park}

bys_park这样做是抓取所有公园,将每个公园的匹配属性设置为 5,然后根据公园上的属性是否为真将公园划分为两个数组。

于 2013-09-26T21:32:08.240 回答