0

私はファブリックのコレクションを持っています。各ファブリックには多くの色があります。

私のDBアソシエーションFabrichas_manyColors through Fabric_colours

solrを使用してファブリックのインデックスを作成しているため、複雑なSQLクエリを構造化することはできません。

結合モデルFabric_coloursは、fabric_idcolour_idパーセンテージを保持します

Colorsモデルは、各色の16進値を保持します。

自分の視点で表示したいのですが、

前記布地に存在する各色、前記色が存在するパーセンテージ。

私の見解では、一度に数十のファブリックをロードしていますが、この情報を取得するために追加のクエリを実行したくありません。Solrが関連するテーブルのすべてのデータを単一の「ドキュメント」にプルしたので、これは必要ないはずだというのが私の理解でした。

現在、私の_fabricパーシャルには、そのファブリックに存在する色を示す次のコードがあります。

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

パーセンテージを抽出するために、ファブリックをリンクする特定の結合テーブルエントリとその特定の色をどのように呼び出すのですか?

4

1 に答える 1

0

Solr はインデックス内にデータを格納できるため、データを表示するときにデータベースにアクセスすることはありません。これを実現する黒点の宝石をお勧めします。その wiki を確認してください。特に、それが説明されている検索およびインデックス作成用のクラスの設定セクションを参照してください。

この方法ではデータが 2 倍になることに注意してください。データベースと 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

それでも遅い場合は、キャッシュを使用してください。

于 2012-09-23T13:09:35.330 に答える