Rails轮胎(elasticsearch)搜索has_many关联

时间:2015-08-07 17:34:39

标签: ruby-on-rails elasticsearch tire

我有2个协会

belongs_to :author
has_many :favorites

我想知道为什么这个例子有效:

tire.search(load: {include: [:author, :comments]}, page: params[:page], per_page: 8) do
  query { string params[:query], default_operator: "AND" } if params[:query].present?
  filter :term, author_id: ['111']
  sort { by :created_at, 'desc' }
end

这个没有:

tire.search(load: {include: [:author, :comments]}, page: params[:page], per_page: 8) do
  query { string params[:query], default_operator: "AND" } if params[:query].present?
  filter :term, favorite_ids: ['567']
  sort { by :created_at, 'desc' }
end

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

外键存储在子表中,Rails会为您连接两个表。

因此,在此模型中,有一个属性author_id,因为此模型属于作者。收藏夹关系的外键存储在收藏夹表中。虽然您可以执行Model.first.favorites并获取相应的favorites,但这是因为后一个表中存储了值。

Model.first.author_id存在。 Model.first.favorite_ids没有。

如果您想在favorites_ids上运行搜索,则需要在to_indexed_json方法中明确定义该搜索。

此外,tire已退役。您应该考虑迁移到elasticsearch-rails或我首选的宝石searchkick