0

私は4つのモデルを持っています。

製品カテゴリ分類画像

Product.rb

has_many  :images 
has_many  :categorizations
has_many  :categories, :through => :categorizations

Category.rb

has_many :categorizations
has_many :products, :through => :categorizations

Categorization.rb

belongs_to :category
belongs_to :product

Image.rb

belongs_to :product

ユーザーがクリックして商品を表示するときに、(同じカテゴリ/カテゴリに基づいて)類似した商品の画像を表示するセクションを下部に表示したいと思います。

私の問題は、ネストされた関係が非常に多いため、関係を抽出する方法がわからないことだと思います。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

現在作業しているオブジェクトと、アクセスする必要があるオブジェクトを考えてみてください。この場合、コントローラーで設定すると仮定します。ページの下部でループ@productするコレクションが必要なようです。@similar_products

最初に使用する製品があります。このことから、商品と同じカテゴリーの商品が欲しい。だから、あなたのコントローラーで

@similar_products = @product.categories.inject({}) do |result_hash, category|
    result_hash[category.name.to_sym] => category.products.reject {|p| p == @product}
    result_hash
end

最終的には、次のようになります。

{:category_1 => [product1, product2, product3], :category_2 => [product4,product5]...}

result_hash の割り当てを

result_hash[category.name.to_sym] => category.products[0..4]

必要に応じて、ビューで製品をカテゴリ別にループできます。

<% @similar_products.each do |k,product_array| # remember that the key is the name and the value is an array %>
    <% product_array.each do |product| %>
        <img src="<%= product.image.path %>" />
    <% end %>
<% end %>
于 2012-04-03T20:56:50.083 に答える