[Rails] 테이블의 총 값 계산 방법(aggregate 함수)
입문
이 보도는 달리기 엔지니어의 첫걸음이다AdventCalendar 2020 13일째 기사
Rails에서 표의 합계 값을 계산할 때 aggregate 함수는 편리하고 지능적이어서 보도를 해 보았다.
개발 환경
IDE:Cloud9
Ruby:2.6.3
Rails:5.2.4
실례를 보다
하고 싶은 일
나는 이런 시계를 만들어서 아래에 합계 값을 표시하고 싶다.
ER 그림
aggregate 함수를 사용하지 않을 때
controllers/carts.rbdef new
@carts = Cart.where(user_id: current_user.id)
end
예를 들어 단백질(protain)의 합계 값을 표시하려면
views/carts/new.html.rb<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.protain %>
<% end %>
<%= sum %>
이렇게 되면 한 항목(상술한 경우 단백질)이 5줄이 필요해 외관상 똑똑하지 않다는 것을 보여준다.
views/carts/new.html.rb<td>合計</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.calorie %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.protain %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.fat %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.carbon %>
<% end %>
<%= sum %>
</td>
전체 시계를 표시하면 비교적 fat감이 있다.
따라서aggregate 함수를 사용하여 더욱 지능적으로 기술한다.
aggregate 함수를 사용하는 방법
컨트롤러는 아까와 같다.
controllers/carts.rbdef new
@carts = Cart.where(user_id: current_user.id)
end
쇼핑 카트 모형에 다음과 같은 내용을 기술하였다.
model/cart.rbdef self.aggregate(column)
self.all.map { |cart| cart.food[column] }.sum
end
views/carts/new.html.rb<td>合計</td>
<td>
<%= @carts.aggregate(:calorie) %>
</td>
<td>
<%= @carts.aggregate(:protain) %>
</td>
<td>
<%= @carts.aggregate(:fat) %>
</td>
<td>
<%= @carts.aggregate(:carbon) %>
</td>
대단해.
Reference
이 문제에 관하여([Rails] 테이블의 총 값 계산 방법(aggregate 함수)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/codeReona/items/2e3948287c9371ec4051
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
IDE:Cloud9
Ruby:2.6.3
Rails:5.2.4
실례를 보다
하고 싶은 일
나는 이런 시계를 만들어서 아래에 합계 값을 표시하고 싶다.
ER 그림
aggregate 함수를 사용하지 않을 때
controllers/carts.rbdef new
@carts = Cart.where(user_id: current_user.id)
end
예를 들어 단백질(protain)의 합계 값을 표시하려면
views/carts/new.html.rb<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.protain %>
<% end %>
<%= sum %>
이렇게 되면 한 항목(상술한 경우 단백질)이 5줄이 필요해 외관상 똑똑하지 않다는 것을 보여준다.
views/carts/new.html.rb<td>合計</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.calorie %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.protain %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.fat %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.carbon %>
<% end %>
<%= sum %>
</td>
전체 시계를 표시하면 비교적 fat감이 있다.
따라서aggregate 함수를 사용하여 더욱 지능적으로 기술한다.
aggregate 함수를 사용하는 방법
컨트롤러는 아까와 같다.
controllers/carts.rbdef new
@carts = Cart.where(user_id: current_user.id)
end
쇼핑 카트 모형에 다음과 같은 내용을 기술하였다.
model/cart.rbdef self.aggregate(column)
self.all.map { |cart| cart.food[column] }.sum
end
views/carts/new.html.rb<td>合計</td>
<td>
<%= @carts.aggregate(:calorie) %>
</td>
<td>
<%= @carts.aggregate(:protain) %>
</td>
<td>
<%= @carts.aggregate(:fat) %>
</td>
<td>
<%= @carts.aggregate(:carbon) %>
</td>
대단해.
Reference
이 문제에 관하여([Rails] 테이블의 총 값 계산 방법(aggregate 함수)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/codeReona/items/2e3948287c9371ec4051
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def new
@carts = Cart.where(user_id: current_user.id)
end
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.protain %>
<% end %>
<%= sum %>
<td>合計</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.calorie %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.protain %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.fat %>
<% end %>
<%= sum %>
</td>
<td>
<% sum = 0 %>
<% @carts.each do |cart| %>
<% sum += cart.food.carbon %>
<% end %>
<%= sum %>
</td>
def new
@carts = Cart.where(user_id: current_user.id)
end
def self.aggregate(column)
self.all.map { |cart| cart.food[column] }.sum
end
<td>合計</td>
<td>
<%= @carts.aggregate(:calorie) %>
</td>
<td>
<%= @carts.aggregate(:protain) %>
</td>
<td>
<%= @carts.aggregate(:fat) %>
</td>
<td>
<%= @carts.aggregate(:carbon) %>
</td>
Reference
이 문제에 관하여([Rails] 테이블의 총 값 계산 방법(aggregate 함수)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/codeReona/items/2e3948287c9371ec4051텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)