簡體   English   中英

適用於HABTM關聯模型的Tire / Elasticsearch

[英]Tire / Elasticsearch for HABTM associated models

我正在嘗試使用我的客戶模型的tire / elasticsearch進行全文搜索。 我有一組與客戶合作的用戶。 客戶模型和用戶模型之間存在HABTM關聯。

有一個manager功能,可以僅對由特定用戶(大多數情況下是當前登錄的用戶)管理的客戶端進行作用域管理。 我想在輪胎中實現一個搜索過濾器,該過濾器的工作方式與ActiveRecord相同。 它不適用於輪胎( no filter registered for [user_ids]錯誤而no filter registered for [user_ids]no filter registered for [user_ids] )。

s.filter :user_ids, manager(params[:manager]).map(&:id) 
  if params[:manager].present?

我相信我可能在這里完全是在做一些事,但是我做這件事的方式有什么問題,您會推薦什么教程/閱讀材料?

這是模型。

class Client < ActiveRecord::Base

  has_and_belongs_to_many :users, :uniq => true

  ## Tire would-be implementation
  # include Tire::Model::Search
  # include Tire::Model::Callbacks
  # mapping do
  #   indexes :name
  #   indexes :comment
  #   indexes :user_ids
  # end

  def self.manager(user_id)
    joins(:users).merge(User.current(user_id))
  end

  def self.index_search(params={})
    ## Tire would-be-implementation - does not work
    # tire.search(load: true) do |s|
    #   s.query { string params[:search], default_operator: "AND" } if params[:search].present?
    #   s.filter :user_ids, manager(params[:manager]).map(&:id) if params[:manager].present?
    # end

    # ActiveRecord implementation - works
    if params[:manager].present?
      if params[:search].present?
        @clients = manager(params[:manager]).where(['name LIKE ?', "%#{params[:search]}%"])
      else 
        @clients = manager(params[:manager])
      end
    else
      if params[:search].present?
        @clients = where(['name LIKE ?', "%#{params[:search]}%"])
      else 
        @clients = all
      end
    end
  end

end

嘗試類似

t.filter :not , {:ids => { :values => self.manager(params[:manager]).map(&:id) }} if params[:manager].present?

要么

t.filter :ids, :values => self.manager(params[:manager]).map(&:id) if params[:manager].present?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM