Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设置Ransack上的默认搜索参数以搜索rails_Ruby On Rails_Ruby On Rails 3_Search_Ransack - Fatal编程技术网

Ruby on rails 设置Ransack上的默认搜索参数以搜索rails

Ruby on rails 设置Ransack上的默认搜索参数以搜索rails,ruby-on-rails,ruby-on-rails-3,search,ransack,Ruby On Rails,Ruby On Rails 3,Search,Ransack,我一直在为这个绞尽脑汁,但还是弄不明白。我觉得答案很明显 我想做的是: 我有一个索引控制器,它列出了一系列作业,我可以使用Ransack进行搜索。每个作业都有一个完成日期,该日期要么包含日期,要么为空(未完成)。目前,搜索本身工作得很好。我想让索引页面只显示未完成的工作,但我也希望它能够工作,以便当有人运行搜索时,返回已完成和未完成工作的结果 任何帮助都将不胜感激。在下面的代码中,:actual是带有完成日期的字段名称。我还环顾了一下网络,想也许像我在工作模型中的DEFAULT\u SEARCH

我一直在为这个绞尽脑汁,但还是弄不明白。我觉得答案很明显

我想做的是:

我有一个索引控制器,它列出了一系列作业,我可以使用Ransack进行搜索。每个作业都有一个完成日期,该日期要么包含日期,要么为空(未完成)。目前,搜索本身工作得很好。我想让索引页面只显示未完成的工作,但我也希望它能够工作,以便当有人运行搜索时,返回已完成和未完成工作的结果

任何帮助都将不胜感激。在下面的代码中,
:actual
是带有完成日期的字段名称。我还环顾了一下网络,想也许像我在工作模型中的
DEFAULT\u SEARCH\u参数={}
这样的东西可能会起作用,但我似乎无法实现它。 代码如下:

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
类作业10,:page=>params[:page])
结束

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

试试这个

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    

我认为您可以在搜索参数不存在时应用自己的过滤器:

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

谢谢这起作用了。我会投票支持这一点,但我没有声誉。在遵循这一点之前,请检查ricsrock的更好答案。我尝试了一下,但没有成功。谢谢你的帮助!嘿@ricsrock关于如何在白名单范围内实现这一点有什么想法吗?回答得好@ricsrock。由于修改了搜索,所以很容易在呈现页面的搜索部分正确显示您添加的默认值。非常好!它工作得很好,也与搜索表单中相应的默认值(正如Steven已经指出的那样)。第二次找到了您的答案。还是很好。这应该是正确的答案@亚历山大·摩尔,请把这个答案标记为正确答案!