现在我有这样的事情:
@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数组传递。
答案 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
属性是否为真,将公园划分为两个数组。