0

"뚱뚱한 모델/마른 컨트롤러"및 "뷰에 논리를 두지 마십시오"라는 조언을 알고 있습니다. 그러나 그것은 제가 예를 통해 배우는 데 도움이 될 것입니다. 다음은 쿼리를보기에 표시하지 않도록 코드를 다시 작성하는 가장 좋은 방법은 무엇입니까?Ruby on Rails - 뷰에서 모델로 ActiveRecord 쿼리 리팩토링

모델

class Product < ActiveRecord::Base 
    belongs_to :order 
end 

class Order < ActiveRecord::Base 
    has_many :products 
end 

컨트롤러

@orders = Order.all 

그것은에 따라

<% @orders.each do |o| %> 
<%= Product.where("order_id = ?", o.id).count %> 
<% end %> 
+0

표시 할 스 니펫이 필요하지 않습니다. –

답변

3

보기 정확히 당신은 표시 할,하지만 간단한 옵션을 사용하면 지정한 연관을 활용하는 것입니다

<% @orders.each do |o| %> 
    <%= o.products.count %> 
<% end %> 

그런 다음 컨트롤러에, 당신은 당신의 SQL 호출을 최적화 할 수 eager loading를 사용할 수 있습니다.

@orders = Order.all(:include => :products) 
+0

컨트롤러에 속해 있는지 여부는 논쟁의 여지가 있습니다. - IMO는 몇 가지 요인에 따라 다릅니다. 매핑 자체에 속할 수도 있고 모델 클래스 메서드에 속할 수도 있습니다. –

+0

확실히 동의합니다. – muffinista

+0

흥미 롭습니다. 답안 모두에 감사드립니다. 나는 그것이 더 잘리고 건조해질 것 같았다. 당신의 도움을 주셔서 감사합니다! – diasks2