在Ransack上为rails设置默认搜索参数

我一直在嘲笑我的大脑,但无法得到它。 我觉得答案可能很明显。

我想要做的是以下内容:

我有一个索引控制器,列出了一系列我可以使用Ransack搜索的作业。 每个作业都有一个完成日期,其中包含日期或为空(未完成)。 目前,搜索本身效果很好。 我想这样做,以便索引页面加载显示只有未完成的工作,但我也希望它工作,以便当有人确实运行搜索时,返回完成和未完成工作的结果。

任何帮助将不胜感激。 在下面的代码中, :actual是具有完成日期的字段的名称。 我也在环顾网络,并认为可能像Job模型中的DEFAULT_SEARCH_PARAMETER={}可能有效,但我似乎无法实现。 这是代码:

 class Job  10, :page => params[:page]) end 

我想你可以在搜索参数不存在时应用你自己的filter:

 def index @search = Job.search(params[:q]) @results = @search.result @results = @results.where(:your_date => nil) unless params[:q] @job = @results.paginate(:per_page => 10, :page => params[:page]) end 

迟到了,但我想我会建议另一种方法,以防其他人遇到这个问题。

上面的答案有效,但它的缺点是默认情况不会添加到Ransack的搜索对象中,因此 – 如果您使用的是搜索表单 – 默认选择不会显示在表单中。

以下方法将默认值添加到搜索对象,因此将显示在搜索表单中。

 def index @search = Job.search(params[:q]) @search.status_cont = 'Open' unless params[:q] #or whatever, must use Ransack's predicates here @results = @search.result @job = @results.paginate(:per_page => 10, :page => params[:page]) end 

因此,默认情况下,您希望页面加载实际为零的记录。 之后,当用户搜索时,您想要回到之前的搜索工作方式。

试一试。

 def index @search = Job.search(params[:q] || Job::DEFAULT_SEARCH_PARAMETER) @search.build_condition @results = @search.result if @results.nil? @results=Job.find(:all, :conditions => ["actual = NULL"] ) end @job = @results.paginate(:per_page => 10, :page => params[:page]) end