0

看着railscasts.com,我想知道Ryan如何实现该网站的搜索过滤器。如果搜索参数不匹配数据库中的任何内容,则他将返回所有记录(例如,如果我们在U​​RL中为搜索参数值输入无效参数,则返回所有记录,因为没有任何内容可以过滤)。如果它匹配数据库中的记录,则他只返回那些匹配的记录。Rails积极的记录查询搜索过滤器

如何实现?我可以在没有任何宝石/全文搜索的情况下仅使用Active Record吗?该查询如何与Arel相似?

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

回答

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 
+0

检查了这一点(过滤一个无效的“类型”) - http://railscasts.com/?type=AAAACCCCCDDDDD。有一种方法可以在单个查询中完成吗? – sat 2013-03-01 05:02:36

+0

另外,如果tag_id参数错误,过滤器如何被忽略?所以他可以确定tag_id param显然是错误的(它应该是一个整数),并忽略在搜索页面上创建一个过滤器链接。例如,看到这个(用一个整数替换tag_id进行比较) - http://railscasts.com/?tag_id=r&type=nbcaaaaaa – sat 2013-03-01 05:17:35

+0

啊,我现在看到它。是否有任何理由,你必须在单个查询中做到这一点?即时思考我看不出一种困难。如果你想检查过滤器是否有效或无效,你必须查询你的模型来检查是否存在与type_id有关的东西。这可能是另一种模式。所以当你看到模型没有返回任何东西时,你可以认为它是错误的,并查询你所有记录的实际情节。 – HungryCoder 2013-03-01 05:21:01