gpt4 book ai didi

ruby-on-rails - 收集来自多模型查询的搜索结果

转载 作者:行者123 更新时间:2023-12-03 01:57:40 25 4
gpt4 key购买 nike

我目前正在使用searchkick gem为搜索查询编制索引。还应注意,我正在搜索两个模型ArtistsAlbums。在我的search_controller中,我有3个实例变量,第一个是@results,用于返回autocomplete(在其他地方使用)的两个模型之间的所有结果:

@results = Artist.search(params[:query], index_name: [Artist.searchkick_index.name, Album.searchkick_index.name], fields: [{ name: :word_start }], limit: 10)

然后是我的 @artists/@albums实例变量。
@artists = @results.select { |result| result.class.name == "Artist" }
@albums = @results.select { |result| result.class.name == "Album" }

我将这些结果分开,以便可以在索引 View 中对艺术家和专辑进行分组,如下所示:
<h1>Search Results</h1>

<div class="artist-results">
<h2>Artists</h2>

<% @artists.each do |artist| %>
<%= link_to artist.name, artist_path(artist) %>
<% end %>
</div>

<div class="album-results">
<h2>Albums</h2>

<% @albums.each do |album| %>
<%= link_to album.name, album_path(album) %>
<% end %>
</div>

我对搜索 Controller 代码的主要关注是,我正在执行2个几乎相同的枚举。我可能是错的,但是有些事情告诉我我不应该这样做。我在做什么,是否有更高效的解决方案?我是否在正确的轨道上?

完整的 Controller 代码
class SearchController < ApplicationController
before_filter :set_results

def index
end

def autocomplete
render json: @results
end

private
def set_results
@results = Artist.search(params[:query], index_name: [Artist.searchkick_index.name, Album.searchkick_index.name], fields: [{ name: :word_start }], limit: 10)
@artists = @results.select { |result| result.class.name == "Artist" }
@albums = @results.select { |result| result.class.name == "Album" }
end
end

最佳答案

不确定它的性能更好。但是您可以使用group by

results = Artist.search(params[:query], index_name: [Artist.searchkick_index.name, Album.searchkick_index.name], fields: [{ name: :word_start }], limit: 10)
@grouped_results = results.group_by{|x| x.class.name }

然后
<h1>Search Results</h1>

<% @grouped_results.each do |class_name, results| %>
<div class="<%= class_name.downcase %>-results">
<h2><%= class_name.pluralize %></h2>

<% results.each do |result| %>
<%= link_to result %>
<% end %>
</div>
<% end %>

关于ruby-on-rails - 收集来自多模型查询的搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35484374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com