使用带有elasticsearch和轮胎的过滤器来模拟rails中的命名范围

时间:2013-09-10 17:05:02

标签: ruby-on-rails ruby elasticsearch tire

我有一个Exhibition模型,它有三个命名范围:

scope :opening, -> { where(start_date: (Date.today .... }
scope :closing, -> { where(end_date: .... }
scope :reception, -> { where("reception is not null")... }

我在同一模型中有以下轮胎映射:

tire.mapping do
    ...
    indexes :start_date, type: "date"
    indexes :end_date, type: "date"
    indexes :reception, type: "date"
    ...
end

我的搜索方法:

def self.search(params)
    tire.search(load: true) do
    query { string params[:query] } if params[:query].present?
    ...
end

在我的exhibitions_controller.rb内,我有以下内容(关闭和接收时也一样)

def opening_this_week
    @exhibitions = Exhibition.opening.search(params)
    ...
end

当我实际搜索其中一个索引字段时,我会收到正确的回复,只有满足查询的展览并且本周开放,但是,当我想要所有开放展览并且没有通过搜索查询时,我得到所有展览,不仅仅是那些本周开幕的展览。

我在这里做错了什么?如何从命名范围转换为方面?或者我应该将其作为过滤器吗?

0 个答案:

没有答案