레일 4를 사용하여 컨트롤러에서 인스턴스 변수에 속성을 추가하고 싶습니다.레일 4의 인스턴스 변수에 속성을 어떻게 추가합니까?
불쌍한 예를 들어 드려 죄송합니다. 간단하게 유지하려고합니다.
예. 컨트롤러에서는 John이라는 사용자를 찾아 새로운 인스턴스 변수를 만듭니다. 이제, 내 컨트롤러에서 John이라는 이름의 모든 사용자에 대해 모든 연령을 합산하여 합계 된 나이를 인스턴스 변수에 다시 입력하여보기에 사용할 수있게하려고합니다.
사용자 모델에는 'id', 'name'및 'age'속성이 있습니다.
@foo_users = Users.where(name: 'John')
@foo_users.each do |foo|
@foo_users.age_sum = Users.where(name: 'John').sum(:age) <-- this does not work
end
합산 된 나이를 데이터베이스에 저장하지 않아도 하나의보기에서만 사용하므로 나는 모든 사용자를 표시 할 수 있도록하고 싶습니다 :
<% @foo_users.each do |user| %>
User name: <%= user.name =>
Sum of ages: <%= user.age_sum %>
<% end %>
업데이트 : 나의 예를 단순화 이상 내가있을 수 있습니다. 여기 현실에 가깝습니다.
회사가 소유 한 호텔. 호텔에는 방이 있습니다. 관리 소프트웨어는 API를 통해 호텔 _ 통계를 회사에 매일 제공합니다. 더 좋은 소식이 없으므로 호텔 _ 통계에는 hotel_id, 일일 체크인, 일일 체크 아웃이 포함됩니다. 내가 작업중인 회사의 백 오피스 레일스 애플리케이션에는 표시된 가장 최근의 통계치가있는 호텔 테이블이있다.
Hotel Id: 123
Daily check-ins: 50
Daily check-outs: 48
Hotel Id: 124
Daily check-ins: 35
Daily check-outs: 37
회사는 또한 체크인 (아웃 순 체크인)의 지난 30 일의 누적 합계를 표시하고 싶어 : 한 줄과 같을 것이다. 이 작업을 수행하려면 컨트롤러에서 가장 최근 날짜 (일반적으로 어제)에 Hotel_Statics를 찾습니다.
latest_stat = HotelStatistic.order('date DESC, hotel_id DESC').first
@latest_date = latest_stat.date
@recent_stats = HotelStatistic.where(date: @latest_date).order('hotel.id ASC').all
내보기에 @recent_stats의 세부 정보를 표시합니다.
이제 각 호텔에 대한 @ recent_stats.check_ins의 지난 30 일 간의 합계를 내보기에 표시하고 싶습니다. 내 생각과 같은 특정 호텔에 대한 check_ins 통계의 지난 30 일을 요약했다 :
@recent_stats.each do |stat|
@last_30_days_check_ins = HotelStatistic.where(hotel_id: stat.hotel_id).where("date >= ?", Date.today - 30).sum(:check_ins)
end
수학 작품,하지만 난 각 호텔의 30 일 합 변수에 액세스 할 수있는 방법이 필요합니다. 당신의 제안 답변에
는<% @recent_stats.each do |statistic| %>
Hotel Id: <%= statistic.hotel_id %>
Daily check-ins: <%= statistic.check_ins %>
Last 30 days check-ins: <%= statistic.last_30_days_check_ins %>
<% end %>
이 더 현실적인 예는 아무것도 변경합니까 : 나는 내가 할 수있는 내보기에 그래서 @recent_stats 인스턴스 변수에 호텔 30 일 합을 추가하여보기에이 쉽게을 기대하고 있었는데 ? 덕분에 문제를 해결해야 select
를 사용
왜 downvote에서 컨트롤러
에
@recent_stats
구축을위한 기존 코드를 계속 시도? 나는 분명히 혼란 스럽다. – Ryan