Rails搜索过滤器的活动记录查询

时间:2013-03-01 04:44:25

标签: ruby-on-rails activerecord ruby-on-rails-3.2 rails-postgresql

看看railscasts.com,我想知道Ryan是如何为网站实现搜索过滤器的。如果搜索参数与数据库中的任何内容都不匹配,那么他将返回所有记录(例如,如果我们为URL中的搜索参数值键入无效参数,则返回所有记录,因为没有要过滤的内容)。如果它匹配数据库中的记录,则他只返回那些匹配的记录。

如何实现?我可以只使用Active Record而不进行任何宝石/全文搜索吗? Arel的查询结果如何?

此外,他如何实施过滤器链接(我们进行搜索后页面顶部的链接)?他是通过逐个删除搜索参数来解析每个搜索参数并在页面上生成链接吗?

1 个答案:

答案 0 :(得分:0)

我没有看到Railscasts.com在无效过滤器(如搜索参数)时显示所有记录。如果没有找到记录,它将返回一个链接以查看所有剧集。例如,请看这个链接: http://railscasts.com/episodes?utf8=%E2%9C%93&search= 它说:

  

没有发现剧集。查看所有剧集。

但是,如果需要,您可以在这种情况下显示所有记录。这很容易。

  def index
    @records = []
    if params[:search].present?
      #YOUR SEARCH LOGIC and assign to @records. for example:
      @records = Episode.where(:title => params[:search])
    end

    unless @records.length
      @records = Episode.all  
    end
  end