p.61: Room.allではなくRoom.for_eachを使う
Closed this issue · 1 comments
hisashim commented
第1刷p.61
ActiveRecordの例ではallではなくfor_eachを使う(原書p2.0での変更点)。
変更前:
# Construct a Hash to store room capacity count keyed by room style
capacity_by_style = {}
rooms = Room.all
for room in rooms
total_count = capacity_by_style[room.style]
capacity_by_style[room.style] = total_count.to_i + room.capacity
end
Room.all は、データベースに以下のようなSQL クエリを発行する。
SELECT * FROM rooms;
データベースは、すべての結果をアプリケーションサーバーに返す。
変更後:
# Construct a Hash to store room capacity count keyed by room style
capacity_by_style = {}
Room.find_each do |room|
total_count = capacity_by_style[room.style]
capacity_by_style[room.style] = total_count.to_i + room.capacity
end
Room.find_each は、データベースに以下のようなSQL クエリを発行する。
SELECT * FROM rooms LIMIT <batch_size> OFFSET <last_batch>;
データベースは、任意の数の結果をアプリケーションサーバーに返す。
hisashim commented
第2刷で修正しました(r436)。