首页 > 解决方案 > 关于 has_many 关联的 Searchkick 查询

问题描述

我有一个 Organizer 模型,它有has_many :events. 该模型如下所示:

class Organiser < ApplicationRecord
  has_many :events, dependent: :delete_all

  scope :search_import, -> { includes(:events) }
  searchkick searchable: [:name]

  def search_data
    {
      name: name,
      category: category
    }
  end
end

事件模型有一个starts_on:datetime列,如果它在某个日期期间有事件,我想过滤组织者。我将如何实现这一目标?

编辑

我通过在search_data方法中添加以下内容来完成这项工作:

   events: events.map{|event| {starts_on: event.starts_on} }

然后在search方法中您可以执行以下操作:

  where: {"events.starts_on" => {gt: Time.now}}

似乎运作良好。如果有更好的方法可以做到这一点,请提及。

标签: ruby-on-railselasticsearchsearchkick

解决方案


我通过将以下内容添加到 search_data 方法来完成这项工作:

events: events.map{|event| {starts_on: event.starts_on} }

然后在搜索方法中您可以执行以下操作:

where: {"events.starts_on" => {gt: Time.now}}


推荐阅读