我在汽车控制器中有以下样板
class CarsController < ApplicationController
# GET /cars
# GET /cars.json
def index
@cars = Car.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @cars }
end
end
假设我的数据库中有5万辆汽车。
我的理解是每次调用/cars/index
都会查询db(select * from cars
),并构建一个对象来存储所有信息。然后Cars视图可以访问@cars
,json请求只会得到一个巨大的json响应,包括所有5万辆汽车。
/cars
是一个非常受欢迎的页面怎么办?如果我有1000万辆汽车怎么办?@cars
)中没有使用index.html.erb
,所以如何验证我不需要
任何json电话? (由于某种原因我不知道Rails需要这个吗?
的?)似乎@cars = Car.all
是一个非常不酷的代码行,仅用于验证您的新控制器是否正常工作,并且可能应该在开始时删除。正确?
答案 0 :(得分:1)
通常你不应该在一个页面上显示所有“汽车”。在显示结果之前应进行一些过滤。最普遍的解决方案是对大型数据集的结果进行“分页”。根据实现,这应该在从数据库中提取实际对象之前发生。
看看
答案 1 :(得分:1)
而不是全部,您应该使用@car = Car.scoped
。它将返回一个活动的记录关系,只有在需要时才会延迟加载汽车对象。高效记忆。
例如,如果您只需要来自@cars
变量的30辆汽车,而该@cars.limit(30)
变量应该包含数据库中的所有汽车,@cars = Car.all
将仅加载那些汽车。
另一方面,如果您使用@cars[0..29]
然后尝试@cars
,则无论如何都会将所有汽车加载到{{1}}中,这会使内存膨胀。
请原谅我的英语。我发现现在很难直接输入。