0

例を挙げましょう。

2つのモデルとして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

同じクラスのオブジェクトのコレクションを反復処理するには、パーシャルを使用する必要があります。これにより、コレクションが反復処理されます。次のように仮定します。

#controller
def index
 @categories = Category.all
end

_category.html.erb次に、ビューのロジックを使用して、views/categories/ で呼び出される部分ビューが必要になります。あなたのパーシャルが次のとおりであるとしましょう:

    <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 %>

||2 番目のオプションは、コレクション@categoriesが空の場合に次のものをレンダリングします。

于 2013-03-07T13:10:18.153 に答える
0

モデル間の関連付けを次のように定義したと仮定します

アプリ/モデル/chosen_product.rb

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

アプリ/モデル/カテゴリ.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 に答える