Ruby on rails 用于搜索筛选器的Rails活动记录查询

Ruby on rails 用于搜索筛选器的Rails活动记录查询,ruby-on-rails,activerecord,ruby-on-rails-3.2,rails-postgresql,Ruby On Rails,Activerecord,Ruby On Rails 3.2,Rails Postgresql,查看railscasts.com,我想知道Ryan是如何实现该站点的搜索过滤器的。如果搜索参数与数据库中的任何内容都不匹配,则返回所有记录(例如,如果我们在URL中为搜索参数值键入无效参数,则返回所有记录,因为没有可过滤的内容)。如果它与数据库中的记录匹配,则只返回那些匹配的记录 如何实现?我可以只使用活动记录而不使用任何gems/全文搜索吗?阿雷尔的问题会是什么样子 另外,他如何实现过滤器链接(我们搜索后页面顶部的链接)?他是否通过解析每个搜索参数,并通过一次剥离一个搜索参数来生成页面上的链接

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

如何实现?我可以只使用活动记录而不使用任何gems/全文搜索吗?阿雷尔的问题会是什么样子


另外,他如何实现过滤器链接(我们搜索后页面顶部的链接)?他是否通过解析每个搜索参数,并通过一次剥离一个搜索参数来生成页面上的链接

我看不到Railscasts.com在显示无效筛选器(如搜索参数)时显示所有记录。当找不到任何记录时,它将返回一个链接以查看所有剧集。例如,请参见以下链接: 它说:

没有发现任何事件。看所有的剧集

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

  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

检查此项(过滤无效的“类型”)-。是否有一种方法可以在单个查询中完成此操作?另外,如果tag_id参数错误,如何忽略筛选器?因此,他能够确定tag_id参数明显错误(它应该是一个整数),并忽略在搜索页面上创建过滤器链接。例如,看到这个(用一个整数替换tag_id进行比较)-啊,我现在看到了。是否有任何理由需要在单个查询中执行此操作?我不认为即时思考有什么困难。如果要检查筛选器是否有效,则必须查询模型以检查是否存在具有该类型\u id的任何内容。可能存在另一个模型。因此,当你看到模型没有返回任何东西时,你可以认为它是错误的,并为所有记录查询你的实际插曲。我想知道是否有一些东西我们可以构造,它会说“如果它存在于数据库中,那么给我这个,否则,给我那个PARAM的所有东西”。它应该在一个查询中,因为如果标记id无效,则会忽略它。我不会想象Ryan,首先点击数据库查看tag_id是否存在,然后如果它不存在(或无效),用其余参数再次点击DB,如果这些参数没有返回任何内容,再次点击DB查看所有记录。那似乎效率很低不,你不必那么做。如果模型正确,则联接查询将不会生成结果。在这种情况下,您必须查询所有可以轻松缓存的内容。当需要时,查询is数据库并不是低效的。对于可能无法重复使用的复杂查询,它可能效率低下。有时,多个查询比单个复杂联接更快。你需要为这一点提供个人资料。