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

时间:2012-09-22 09:05:24

标签: ruby-on-rails ruby-on-rails-3 solr has-many-through sunspot

我有一个面料系列,每个面料都有很多颜色。

我的数据库关联 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%>

如何调用连接结构和特定颜色的特定连接表条目来提取百分比?

1 个答案:

答案 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

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