我希望我的页面默认没有结果。
我希望实现相同的效果,例如当我添加.none到结果但仍然在参数设置结果后显示。 我怎样才能做到这一点?
def index
@search = SomeClass.all
@items = @search.result.page(params[:page]).per(10)
end
答案 0 :(得分:2)
如果我理解你的问题,你希望你的索引页面在你第一次加载视图时(当过滤器为空时)不显示任何记录。这可能导致返回太多记录,并且用户将遇到非常慢的加载页面。
解决此问题的一种方法是确保在搜索参数传递给操作时执行搜索查询 。
def index
# we define the search but we don't execute it right away
search
# execute the search query only if search params exists
items(params[:page],10) if search_params
end
private
def items(page,per=10)
@items ||= search.result(page).per(per)
end
def search
@search ||= SomeClass.search(search_param)
end
def search_param
params[:q]
end
现在您可以安全地引用@search,它将始终在您的视图中定义。 另一方面,可能会或可能不会定义@items,因此您必须在视图中处理这两种情况。 例如haml:
.row
= @items.nil? ? (render 'no_results') : (render 'results')
答案 1 :(得分:0)
可能是更好的解决方案,请使用.none
而不是.all
。
def index
search_params = params[:q]
query_base = search_params.present? ? Model.all : Model.none
@search = query_base.ransack(search_params)
@records = @search.result
end