0

我举个例子。

假设我有 Category 和 Product 作为我的两个模型,另一个 ChosenProduct 指定/处理它们之间的多对多关系。现在,当我有某些类别并且我在这些类别上循环迭代以获得相应的产品时。如何在我的视图中访问这些多个产品对象?

我是 Rails 和 MVC 的新手,所以现在我自己在做这个任务。但我认为这不应该是正确的方式。我应该如何处理这个?

我正在按要求添加我的视图代码。现在这对我来说很好。但我不认为它漂亮。

    <ul>
    <% @categories.each do |category| %>
    <li>
    <%= image_submit_tag("add.png", :height => "20", :width => '20', :name=>"add_product_to_#{category.id}", :id=>"add_product_to_#{category.id}" ) %>

    <%= category.category_name %>
    <% @chosen_products = category.chosen_products %>
    <% @chosen_products.each do |chosen_product| %>
        <% @products = Product.where(:id => chosen_product.product_id).all %>
        <% @products.each do |product| %>
            <ul>
                <li><%= product.product_name %>
                    <ul>
                        <li><%= image_tag("#{product.product_image_url}", :size => "200x200", :alt => "Can not load image!") %></li>
                        <li><%= product.product_image_url %></li>
                    </ul>
                </li>
            </ul>
        <% end %>
    <% end %>
<% end %>
</li>
</ul>
4

2 回答 2

0

我假设您已将模型之间的关联定义为

应用程序/模型/chosen_product.rb

class ChosenProduct < ActiveRecord::Base
  belongs_to :category
  belongs_to :product
end

应用程序/模型/category.rb

class Category < ActiveRecord::Base
  has_many :chosen_products
  has_many :products, through: :chosen_products
end

所以在你看来你可以做

<ul>
  <% @categories.each do |category| %>
  <li>
    <%= image_submit_tag("add.png", :height => "20", :width => '20', :name=>"add_product_to_#{category.id}", :id=>"add_product_to_#{category.id}" ) %>

    <%= category.category_name %>
    <% category.products.each do |product| %>
      <ul>
         <li><%= product.product_name %>
            <ul>
               <li><%= image_tag("#{product.product_image_url}", :size => "200x200", :alt => "Can not load image!") %></li>
               <li><%= product.product_image_url %></li>
            </ul>
         </li>
      </ul>
    <% end %>
 </li>
<% end %>

于 2013-03-07T16:50:34.470 回答
0

要遍历同一类的对象集合,您必须使用部分对象,它将为您遍历您的集合。假设:

#controller
def index
 @categories = Category.all
end

然后,您将需要_category.html.erb在您的视图/类别/中调用一个局部视图,其中包含您的视图逻辑。让我们假设你的部分是:

    <div class="info">
       <p class="name"><%= category.name %></p>
</div>

部分将接收一个类别的集合,它会自动迭代该集合。因此,在部分中,您必须以单数形式调用对象,在这种情况下category是指正在渲染的实际对象。

然后在您index.html.erb看来,您所需要的只是渲染部分。

<%= render @categories %>

或者

<%= render(partial: "categories/category", collection: @categories) || "<h1>There are no categories</h1>".html_safe %>

||如果集合@categories为空,第二个选项将呈现旁边的内容。

于 2013-03-07T13:10:18.153 回答