如何避免从此代码调用.all
?因为.all
会将所有项目加载到内存中,但速度缓慢
我已经尝试将它们组合在一起,但是代码并不是真的那么干
companies_controller.rb
def index
if params[:search].present?
@companies = Company.where("name ilike ?", "%#{params[:search]}%")
else
@companies = Company.all
end
if params[:page].present? && params[:per_page].present?
@companies = @companies.page(params[:page]).per(params[:per_page])
elsif params[:page].present?
@companies = @companies.page(params[:page])
else
@companies = @companies.page
end
end
类似的东西呢?
def index
scope = Company.all
scope = scope.where("name ilike ?", "%#{params[:search]}%") if params[:search].present?
scope = scope.per(params[:per_page]) if params[:per_page].present?
scope.page([1, params[:page].to_i].max)
end
顺便说一句all
将不是将所有项目加载到内存中。它仅返回可以返回所有记录的all
(如果未向其添加更多范围)。