【问题标题】:Chain meta_search results链元搜索结果
【发布时间】:2012-08-07 15:10:20
【问题描述】:

如何链接元搜索的搜索方法?

@result = User.search(params[:search]).search(params[:filters])

我们可以像这样在 ActiveRecord 上调用链式方法

User.active.male.where( age: 14..20)

它的链接可以在元搜索的结果上吗?

【问题讨论】:

    标签: ruby-on-rails activerecord named-scope meta-search active-relation


    【解决方案1】:

    我搞定了。。如果你有同样的问题,你可以试试。

    meta_search 的搜索方法返回MetaSearch::Search::ModelName,其中ModelName 是您的模型名称。 Meta_search 为这个对象提供了一个方法relation。您可以调用relation 方法来获取ActiveRecord::Relation 对象,然后您可以在该对象上再次调用搜索方法。请参阅下面的代码以了解我在说什么。

    @result = User.search(params[:search])
    @search = @result.relation.search(params[:filters])
    

    这里@resultMetaSearch::Search::User的实例,所以我们可以调用relation方法来获取ActiveRecord::Relation的实例,即

    @result.relation
    

    然后我们可以在这个实例上再次调用搜索方法。即

    @result.relation.search(params[:filters])
    

    【讨论】:

      【解决方案2】:

      一次性搜索怎么样

      @result = User.search  params[:search].merge(params[:filters])
      

      【讨论】:

      • 不能一口气完成。 params[:search] 有一个键“user_notes_note_name_equals” params[:filters] 也有一个键“user_notes_Note_name_equals”,但两者都有不同的搜索值。因此,如果我们合并它们,那么只有一个键“user_notes_note_name_equals”具有最新分配的值,因为两个键是相同的。之前的值将被覆盖。
      • 哦,伙计,那么您的搜索结果应该是空的,它总是会返回空结果。一个 note_name 怎么会有两个名字?据我了解,meta_search 生成的查询类似于“SELECT * form users (join here) WHERE user_notes.name = 'blah' AND user_notes.name = 'blah2”。你确定你有两个同名的键不是用于订单的第二个键吗?
      猜你喜欢
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 2011-03-20
      • 2018-11-15
      • 1970-01-01
      • 2011-08-27
      相关资源
      最近更新 更多