我有一个面料系列,每个面料都有很多颜色。
我的数据库关联 Fabric has_many Colors through Fabric_colours
我使用solr索引我的Fabrics,因此无法构建复杂的SQL查询。
连接模型Fabric_colours,成立 fabric_id 的colour_id 百分比
“颜色”模型保存每种颜色的十六进制值。
我想在我看来,
所述织物中存在的每种颜色, 所述颜色存在的百分比
我的观点是一次加载数十种结构,我不想执行其他查询来获取此信息。据我所知,Solr已将所有相关表格的数据提取到一个“文档”中,因此这不是必需的。
目前在我的_fabric部分中,我有以下代码显示该结构中存在的颜色。
<% fabric.colours.each do |c| %>
<%= c.hex %>
<% end%>
如何调用连接结构和特定颜色的特定连接表条目来提取百分比?
答案 0 :(得分:0)
Solr可以将数据存储在其索引中,以便在您想要显示数据时不会访问数据库。我建议您使用sunspot gem来实现这一目标。检查其维基,尤其是描述它的Setting up classes for search and indexing部分。
请注意,这种方式会导致数据加倍 - 您将在数据库和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
如果这对您来说仍然很慢,请使用缓存。