如何避免从该Rails控制器代码中调用.all?

问题描述 投票:0回答:1

如何避免从此代码调用.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
ruby-on-rails ruby
1个回答
0
投票

类似的东西呢?

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(如果未向其添加更多范围)。

© www.soinside.com 2019 - 2024. All rights reserved.