Setting default search parameter on Ransack for rails
我一直在为此绞尽脑汁,但无法理解。我觉得答案可能很明显。
我想做的是以下事情:
我有一个索引控制器,其中列出了可以使用Ransack搜索的一系列作业。每个作业都有一个完成日期,该日期中可能有日期,或者为空(未完成)。目前,搜索本身效果很好。我希望这样做,以便加载索引页面以仅显示未完成的工作,但是我也希望它能够工作,以便当有人进行搜索时,返回已完成和未完成工作的结果。
任何帮助将不胜感激。在下面的代码中,
这是代码:
1 2 3 4 5 6 7 8 9 10 11 | class Job < ActiveRecord::Base DEFAULT_SEARCH_PARAMETER ={} attr_accessible :items_attributes, :actual end def index @search = Job.search(params[:q] || Job::DEFAULT_SEARCH_PARAMETER) @search.build_condition @results = @search.result @job = @results.paginate(:per_page => 10, :page => params[:page]) end |
晚些时候参加聚会,但是我想我建议一种替代方法,以防其他人遇到这种情况。
上面的答案有效,但是其缺点是默认值未添加到Ransack的搜索对象中,因此-如果使用的是搜索表单-默认选择项不会显示在表单中。
以下方法将默认值添加到搜索对象,因此将显示在搜索表单中。
1 2 3 4 5 6 | 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 |
我认为您可以在搜索参数不存在时应用自己的过滤器:
1 2 3 4 5 6 | 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 |
因此,默认情况下,您希望页面加载实际为零的记录。稍后,当用户搜索时,您想回到搜索之前的工作方式。
尝试一下。
1 2 3 4 5 6 7 8 9 10 | 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 |