2012-03-05 2 views
0

제품 및 Statement_Sales에 대한 모델을 보유하고 있으며 내 뷰에서 영업 보고서 및 기본 분석을 제공하기 위해 다양한 합계 및 그룹 조치를 수행하려고합니다. 모델이나 컨트롤러를 넣을 수있는 가장 좋은 곳은 어디입니까? 내 견해에서 어떻게 접근 할 수 있습니까? 내가 쉽게 내보기에 이런 식으로 뭔가를 사용하여 온라인 판매 날짜별로 줄을 가져올 수있는 순간판매 합계/그룹화 -이 기능을 수행 할 위치는 어디입니까?

:

<% @product.statement_sales.each do |sales| %> 
<td><%= sales.units %></td> 
<% end %> 

그러나이 라인 데이터에 의해 라인, 나는 처음으로 총을 줄 수 있어야합니다 날짜는 다음 7 일, 1 개월, 3 개월, 1 년 등 등 콘솔에서

에 대한 합계 내가 사용 날짜별로 그룹화를 알아 냈어요 :

p.statement_sales.group(:date).sum(:units) 

하지 t에 그것을 가지고하는 방법을 잘 그는 하나의 날짜까지 그룹화하는 것 이상의 응용 및 적용.

차별화 된 접근 방식으로 몇 개의 벽을 치기 때문에 Rails에 매우 익숙합니다. 나는 이것이 실제로 아주 쉽다라고 확신한다!! 미리 감사드립니다.

답변

0

엄지 손가락의 규칙은 "팻 모델, 스키니 컨트롤러"입니다. 즉, 대부분의 논리를 모델에 적용하고 컨트롤러 작업을 가능한 간단하게 유지해야합니다.

특정 시나리오의 경우 레일 scopes을 살펴보아야합니다. Scopes를 사용하면 위에서 설명한 것과 같은 복잡한 쿼리를 캡슐화하고 다시 사용할 수 있습니다.

class StatementSale < ActiveRecord::Base 
    scope :units_by_date, group(:date).sum(:units) 
end 

이 당신이보기에 @product.statement_sales.units_by_date를 호출 할 수 것입니다 : 예를 들어, belongs_toProduct (나는 당신의 객체 그래프의 특성을 모르는)을 StatementSale 모델을 가지고 가정.

매개 변수를 사용하는 범위를 작성할 수도 있습니다. 예를 들어, 동적으로 그룹에 매개 변수를 전달 할 수 있기를 원 말, 당신의 범위는 다음과 같을 것이다 :

scope :units_grouped_by, lambda { |p| group(p).sum(:units) }

을 당신이 원하는 것 더 복잡한 쿼리의 세부 사항을 모른 채 수행, 스코프는 확실히 모든 논리를 수용 할 장소입니다.

+0

감사합니다. 시도해 보겠습니다. – Raoot

+0

범위 접근 방식이 작동하지 않는 것 같습니다. 오류가 발생합니다. 그러나 작동하는 것처럼 보이는 다음을 시도해보십시오 : def self.units_by_date 그룹 (: 날짜) .sum (: units) 끝 – Raoot

+0

보고있는 오류가 무엇입니까? 클래스 메서드를 추가하는 것은 스코프를 사용하는 대신 사용할 수 있지만 둘을 교환해서 사용할 수 있어야합니다. –

관련 문제