0

我有四个模型。

产品类别分类图片

产品.rb

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

类别.rb

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

分类.rb

belongs_to :category
belongs_to :product

图片.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 回答