0

建物とアパートの 2 つのモデルがあります。建物 has_many :アパートとアパート has_many :建物。アパート インデックスでは、すべての建物を一覧表示して、ユーザーがどの建物に住んでいるかでアパートをフィルター処理できるようにします。ただし、アパート ID が既に指定されている場合は、特定のアパートを 1 つ取得したい場合もあります。現在、アパート#indexには次のものがあります。

デフインデックス

@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

2 つのクエリを実行せずに、これを行うより良い方法はありますか?

4

3 に答える 3

0

代替案もあるかもしれません。

@buildings = Building.all

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

end

ただし、コレクションが非常に大きい場合、これはパフォーマンスが低下するため、2デシベルの呼び出しを続けます。

于 2013-01-17T16:06:41.320 に答える
0

このdetectメソッドは、ブロックに一致するオブジェクトの列挙型を検索します。たとえば、

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

これは、検索する建物の量に比例しますが、建物の量が十分に少なく、とにかくそれらすべてをロードしている場合、これは問題にならない可能性があります.

于 2013-01-17T16:26:25.610 に答える
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
于 2013-01-17T16:27:21.473 に答える