2013-09-26 29 views
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數組傳遞。

+1

不清楚,從你發佈的內容。我只做了幾個月的紅寶石,我可以看到幾種方法可以解決這個問題。哈希和OpenStruct是其中兩個。 –

+0

哈哈,這是第3周用紅寶石給我。我會研究這些 – Chris

回答

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屬性是否是真正的雙陣列。