2013-01-17 100 views
0

我有兩個模型:建築和公寓。建築has_many:公寓和公寓has_many:建築物。在公寓索引中,我想列出所有建築物,以便用戶可以過濾他們所在建築物的公寓。但是,有時候我也想拉一個特定的公寓 - 如果公寓ID已經被提供。眼下,在公寓#指數,我有:Model.all和Model.find(id):我可以用一個查詢來做到這一點嗎?

高清指數

@buildings = Buildings.all 

    if params[:building_id] # the apartments resource is nested in the building resource route. 
     @building = Building.find(params[:building_id]) 
    end 

end 

有沒有更好的方式來做到這一點,而無需運行兩個查詢?

回答

0

好替代可能是。

@buildings = Building.all 

    if params[:building_id] 
     @building = @buildings.select{|b| b.id == params[:building_id}.first 
    end 

end 

但這是糟糕的表現,如果集合真的很大,所以留2分貝的電話。

0

detect方法搜索可枚舉用於匹配塊的對象,例如

building = buildings.detect {|b| b.id == params[:building_id].to_i} 

這將是在建築物中的搜索量線性的,儘管如果建築物的量是足夠小,你是無論如何加載他們這可能不是一個問題。

0

您可以使用ruby的Array#select從獲取的數組中選取您想要的項目。

def index 
    @buildings = Buildings.all 
    if params[:building_id] 
    @building = @buildings.select({|building| building.id == params[:building_id]}).first 
    end 
end 
相關問題