покончить с результатом цикла в рельсах - PullRequest
0 голосов
/ 09 октября 2018

Я работаю над своего рода заказом, в котором у меня есть несколько сумм в разных валютах только в одном атрибуте.Поэтому я пытаюсь сделать sum в разных валютах внутри этого атрибута, используя другие атрибуты в таблице, которая работает нормально, но выводит результат в виде числа всех строк, а не просто показывает сумму вычисленных случайных значений.

orders_controller.rb

module Admin
  module Statistic
    class OrdersController < BaseController
      def show
        @orders_grid = ::Statistic::OrdersGrid.new(params[:statistic_orders_grid]) do |value|
          value.page(params[:page]).per(20)
        end
        @assets = @orders_grid.assets


        #@fee_groups = {:fee => @assets.sum(:fee)}
        @fee_groups = {
          :fee => @assets.sum{|t|
            olaoa = t.type
            market_string = t.currency
            base_currency = market_string.slice(0..2)
            quote_currency = market_string.slice(3..5)
            if olaoa == 'OrderBid' and base_currency == 'btc'
              "#{ t.fee.to_s + ' ' + base_currency.upcase }"
            elsif olaoa == 'OrderAsk' and quote_currency == 'ngn'
              "#{ t.fee.to_s + ' ' + quote_currency.upcase }"
            end
          }
        }

        @orders_filter = true
        @orders_group = true
      end
    end
  end
end

summary.htm.slim

.panel.panel-default
  .panel-heading
    h4.panel-title.row
      a data-parent="#filter-accordion" data-toggle="collapse" href="#summary"
        span.col-xs-8.text-muted = t('admin.statistic.summary')
        span.col-xs-4.text-right.text-muted = t('admin.statistic.click-to-expand')
  #summary.panel-collapse.collapse
    .panel-body
      .datagrid-groups
        - if !@orders_group
          - if groups
            - groups.each do |key, val|
              .datagrid.group.row
                span.col-xs-2.title = t("admin.statistic.#{controller_name}.#{controller.action_name}.#{key}")
                span.col-xs-10.value = val
        - if @orders_group
          / Summary Count Loop
          - if groups
            - groups.each do |key, val|
              .datagrid.group.row
                span.col-xs-2.title = t("admin.statistic.#{controller_name}.#{controller.action_name}.#{key}")
                span.col-xs-10.value = pluralize(val, 'Order')
          / Summary Fees Loop. This is the Fee loop causing problem if am rigth and I dont know how to fix this.
          - if @fee_groups
            - @fee_groups.each do |key, val|
              .datagrid.group.row
                span.col-xs-2.title = t("admin.statistic.#{controller_name}.#{controller.action_name}.#{key}")
                span.col-xs-10.value = val

Результат кода

Result Image

Итак, как вы можете видеть, он рендерит 0.0BTC 5 раз, потому что фильтр имеет только 5 ордеров.Как мне справиться с этим.Я хочу, чтобы только сумма всех BTC отображалась в результате, а не 5 раз.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 09 октября 2018

Поскольку вы суммируете строки в запросе @fee_groups, вы получите строки рядом друг с другом вместо общей суммы.

Если вы называете это так

@fee_groups = { fee: @assets.sum{|t| t.fee}}

Вы получите общую сумму своих активов.

...