【问题标题】:Rails: How to sum total amount per day and over entire periodRails:如何总结每天和整个期间的总金额
【发布时间】:2016-06-09 02:04:47
【问题描述】:

我想合计每天和整个期间的总金额。

我还想显示每种货币的金额。

显示图片如下。

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

尽管我应该使用 groupsum 等,但我不明白如何将它们应用到我的代码中。

如果您能给我任何建议,将不胜感激。

我的模型

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
  ...

views\schedules\show.html.erb

<%= render @schedules %>

views\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%>

如果您能给我任何建议,我们将不胜感激。

【问题讨论】:

    标签: sql ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    您可以使用Money Gem 为此类视图生成视图和功能。

    希望你能得到你想要的。

    【讨论】:

      【解决方案2】:

      您需要的查询类似于:

      ...events.group('events.event_day').sum('events.amount')

      创建一个提供最必要信息的 Github gist 可能会有所帮助,因为我假设 event_day 是在事件表中定义的,否则您必须引用 rooms.day

      更好的方法是使用 Arel,它可以让您更灵活地编写。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 1970-01-01
        相关资源
        最近更新 更多