如何在ruby / rails中为对象添加额外元素

时间:2013-09-26 20:50:59

标签: ruby-on-rails ruby

现在我有这样的事情:

  @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

最好在对象或“struct”数组@bysParks@nonBysParks中包含匹配项,以便我不必像这样创建并行数组。

编辑:目标是避免生成@bysMatch@nonBysMatch数组,并将信息包含在park对象中,以便可以使用BYSparks数组传递。

1 个答案:

答案 0 :(得分: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

尽管你可以使用更精致更紧凑的红宝石,但效果会更好。

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

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