2016-10-10 251 views
0

如何禁用ransack gem來搜索第一個請求中的所有記錄?禁用搜索全部搜索結果

我擁有數千條記錄,並且不希望每次訪問該頁面時都加載它們。我只想顯示搜索表單。

def index 
    @search = ransack_params 
    @users = ransack_result 
end 

private 
def ransack_params 
    User.search(params[:q]) 
end 

def ransack_result 
    @search.result(distinct: false) 
end 

我的控制檯的輸出顯示如下:

Processing by UsersController#index as HTML Parameters: {"utf8"=>"✓", "q"=>{"name"=>""}, "button"=>""} 
    Rendering users/index.html.erb within layouts/application 
    User Load (0.5ms) SELECT "users".* FROM "users" 

回答

0

能做到這兩種方式。

1 - 如果params [:q]爲空,則不要迭代用戶結果。 直到嘗試使用搜索結果關係的記錄時才執行搜索查詢。

這樣你就可以像在你看來

unless params[:q].blank? 
    # @search.each do ... 
end 

2以下 - 創造出產生任何結果的空範圍

class User < ActiveRecord::Base 
    scope :empty_results, -> { where(id: '-1000') } 
end 

def ransack_params 
if params[:q].blank? 
    User.empty_results.search 
else 
    User.search(params[:q]) 
end 
end