2013-03-07 2 views
0

예를 들어 설명하겠습니다.컨트롤러에서 여러 개의 activerecord 객체를 뷰로 전달하는 방법은 무엇입니까?

두 모델로 카테고리 및 제품이 있고 그 사이에 많은 관계를 지정/처리하는 다른 ChosenProduct가 있다고 가정 해보십시오. 이제 특정 범주가있을 때 해당 범주에 대한 루프를 반복하여 해당 제품을 가져옵니다. 내보기에서 이러한 여러 제품 개체에 액세스하는 방법?

저는 레일즈와 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> 
+0

코드를 추가하면 개선 할 수있는 방법이 표시됩니다. – jvnill

+0

컨트롤러에서 데이터를 마샬링하고 뷰 코드가 필요한 모든 반복 작업을 수행하도록합니다. 이상적으로 (그리고 이것은 의견의 문제이며, 양측에서 지지자를 찾을 것입니다.) 귀하의보기 코드는 데이터베이스를 읽지 않습니다. 즉, Product.find() 또는 Product.where()가 없습니다. 이러한 종류의 호출을하기가 힘들다면 아약스 솔루션을 원할 것입니다. – railsdog

답변

0

가 같은 클래스의 개체의 컬렉션을 반복하려면이 부분을 사용해야합니다, 당신을 위해 당신의 수집을 반복합니다. 이 가정 :

#controller 
def index 
@categories = Category.all 
end 

는 그런 다음보기의 논리와 전망/카테고리에서 _category.html.erb라는 부분보기를 /이 필요합니다. 당신의 부분 가정하자 것은 :

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

부분 카테고리의 컬렉션을 받게되며, 자동으로 수집을 반복합니다. 그래서 partial에서 객체를 단수 형태로 호출해야합니다.이 경우 category은 렌더링되는 실제 객체를 나타냅니다.

그런 다음 index.html.erb보기에서 부분보기를 렌더링하면됩니다. 경우에 || 옆에 무엇을 렌더링

<%= render @categories %> 

또는

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

두 번째 옵션

컬렉션 @categories가 비어 있습니다.

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

관련 문제