在视图中显示带有solr结果的联接表信息



我有一组织物,每种织物都有多种颜色。

我的数据库关联织物通过Fabric_colors 具有多种颜色(_M)

我正在使用solr对Fabrics进行索引,因此无法构建复杂的SQL查询。

连接模型Fabric_colors保持fabric_idcolor_id百分比

Colours模型保存每种颜色的十六进制值。

我想在我的视图中显示

所述织物中存在的每种颜色,所述颜色存在的百分比

我的视图是一次加载几十个结构,我不想执行额外的查询来获取这些信息。据我所知,Solr已将所有关联表的数据拉入一个"文档"中,因此不需要这样做。

目前,在我的_fabric部分中,我有以下代码显示了该织物中的颜色。

<% fabric.colours.each do |c| %>
<%= c.hex %>
<% end%>

我该如何调用连接织物和特定颜色的特定联接表条目来提取百分比?

Solr可以将数据存储在其索引中,这样当您想要显示数据时,它就不会访问数据库。我推荐你的太阳黑子宝石,会让你实现这一点。签出它的wiki,尤其是描述它的"为搜索和索引设置类"部分。

请注意,这种方式会导致数据翻倍——您将在数据库和solr索引中存储相同的数据。

我建议您使用急切加载,而不是将数据存储在solr索引中。您可以在控制器中预加载颜色百分比以及颜色对象。

def show
# Loads fabrics, the join table and colours
@fabrics = Fabric.includes(:fabric_colours => [:colour])... # .all or .where or whatever
end
def search
# Searches for fabrics with eager loading
search = Fabric.search(:include => { :fabric_colours => :colour }) do
# ... search criteria
end
@fabrics = search.results
end

如果这对您来说仍然很慢,请使用缓存。

最新更新