刚开始使用Ransack,我很喜欢它。但是不顾一切地知道如何从空白索引开始,没有结果?强制用户使用搜索表单。这是控制器到目前为止的样子。
meals_controller.rb
def index
@search = Meal.search(params[:q])
@meals = @search.result
end
修改 -
一些如何运作,我不知道如何
meals_controller.rb
class MealsController < ApplicationController
before_filter :set_search
def index
if params[:q].blank?
@q = Meal.none.search
else
@q = Meal.search params[:q]
end
@meals = @q.result
end
def set_search
@search=Meal.search(params[:q])
end
end
答案 0 :(得分:4)
我不喜欢使用空白范围,因为你不必要地查询。
我改用以下方法:
# If no search params, default to empty search
if params[:q] && params[:q].reject { |k, v| v.blank? }.present?
@q = User.search(params[:q])
@users = @q.result
else
@q = User.search
@users = []
end
然后,您仍然可以在视图中使用@q作为search_form_for
,但默认情况下不进行查询。
答案 1 :(得分:1)
我使用名为none
的伪作用域,它不返回where{id < -1}
之类的记录(你确实使用了squeel,对吗?)。
然后写
def index
if params[:q].blank?
@q = Meal.none.search # so you have a ransack search
else
@q = Meal.search params[:q]
end
@meals = @q.result
end
<强>加成强>:
在您看来,您需要:
<%= search_form_for @q, url: meals_path, html: {method: :get} do %>
...
<% end %>