Rails:如何总计每天和整个期间的总金额
问题描述:
我想每天和整个期间的总金额总和。Rails:如何总计每天和整个期间的总金额
我还想显示每种货币的金额。
显示图像如下。
Day 1
event_title1-1 USD 1.11
event_title1-2 -
event_title1-3 EUR 2.22
event_title1-4 USD 3.33
event_title1-5 -
Today's total
USD 4.44
EUR 2.22
-------------
Day 2
event_title2-1 EUR 4.44
event_title2-2 SGD 5.55
event_title2-3 -
event_title2-4 -
event_title2-5 EUR 6.66
Today's total
EUR 11.10
SGD 5.55
===========
Grand Total
USD 4.44
EUR 15.54
SGD 5.55
Althouhg我应该使用诸如group
或sum
等等,我coundn't了解如何将它们应用到我的代码。
所以,如果你能给我任何建议,将不胜感激。
我的模型
class Schedule
has_many :days, inverse_of: :schedule, dependent: :destroy
end
class Room
belongs_to :schedule, inverse_of: :rooms
has_many :events, inverse_of: :room, dependent: :destroy
end
class Event
belongs_to :room, inverse_of: :events
has_one :schedule, autosave: false, through: :room
end
schema.rb
create_table "scedules", force: :cascade do |t|
t.string "title"
t.integer "user_id"
...
end
create_table "rooms", force: :cascade do |t|
t.string "room"
t.integer "scedule_id"
t.integer "day", default: 1
...
end
create_table "events", force: :cascade do |t|
t.time "start_at"
t.time "end_at"
t.string "title"
t.integer "room_id"
t.string "currency"
t.decimal "amount"
...
end
schedules_controller.rb
...
def show
@schedules = Schedule.find(params[:id])
...
end
...
点意见\时间表\ show.html.erb
<%= render @schedules %>
意见\时间表\ _schedule.html.erb
<% schedule.rooms.each_with_index do |r, idx| %>
<div class="day">Day <%= idx + 1 %></div>
<% r.events.each do |e| %>
...
<%= e.title %>
<% if e.currency.present? && e.amount.present? %>
<div align="right">
<% if e.currency.to_i == 1 %>
USD
<% elsif e.currency.to_i == 2 %>
EUR
<% elsif e.currency.to_i == 3 %>
SGD
...
<% end %>
<%= e.amount %>
</div>
<% end %>
<% end%>
...
<% end%>
<% end%>
如果你能给我一些建议将不胜感激。
答
你需要将查询是这样的:
... events.group('events.event_day').sum('events.amount')
它可能有助于创建一个Github的要旨提供最需要的信息,我将认为event_day定义在事件表上,如果不是,你必须参考rooms.day
。
更好的方法是使用Arel,它可以让你写得更灵活。