【问题标题】:download leaderboard reports into a csv rails将排行榜报告下载到 csv rails
【发布时间】:2021-03-11 14:54:12
【问题描述】:

我有一个报表控制器,其中有排行榜。我想将排行榜下载到 csv 文件中 这是排行榜代码

def leaderboard
      if params.has_key?(:start_date) && params.has_key?(:end_date) && params.has_key?(:account)
        if params[:unit] == 'all'
          @start_date = current_user.created_at
          @end_date = Time.now
        else
          @start_date = Time.at(params[:start_date].to_i/1000)
          @end_date = Time.at(params[:end_date].to_i/1000)
        end

        if params[:account] == 'all'
          user_accounts = current_user.accounts.collect{ |a| a.id }
          ActsAsTenant.without_tenant do
            @conversations = Conversation.where(account_id: user_accounts).updated_between(@start_date,@end_date)
            @users = current_user.accounts.collect{|account| account.users}.flatten.uniq.to_a
            unassigned = User.new(name: 'Un-assigned')
            @users << unassigned
          end
        else
          account = Account.find(params[:account])
          ActsAsTenant.with_tenant(account) do
            @conversations = account.conversations.updated_between(@start_date,@end_date)
            @users = account.users.to_a
            unassigned = User.new(name: 'Un-assigned')
            @users << unassigned
          end
        end
      else
        render json: {error: 'Invalid parameters'}, status: 422
      end
    end

这是我希望能够以 csv 格式下载的数据图像 https://i.stack.imgur.com/VI6lo.png

这里是排行榜.json.jbuider

json.users @users do |user|
   json.(user,:id, :name)
   json.closed_count @conversations.where(user: user).closed.count
   json.open_count   @conversations.where(user: user).open.count
   json.replies      @conversations.where(user: user).inject(0){|sum, conversation| sum + conversation.messages.where(updated_at: @start_date..@end_date).where(direction: 'OUT').count}
   json.resolution_time formatted_duration(array_mean(@conversations.closed.where(user: user).closed.collect{ |c| c.resolution_time }))
   json.first_response Conversation.first_response(@conversations.where(user: user))
end

json.total_closed   @conversations.closed.count
json.total_open     @conversations.open.count
json.total_replies  @conversations.inject(0){|sum, conversation| sum + conversation.messages.where(updated_at: @start_date..@end_date).where(direction: 'OUT').count}
json.start_date @start_date.to_i * 1000
json.end_date @end_date.to_i * 1000

如何将其下载到 csv 中?

【问题讨论】:

    标签: ruby-on-rails ruby controller leaderboard


    【解决方案1】:

    从您的代码 sn-p 中,我不确定您要“导出”什么,但总的来说它应该是这样的:

    
    csv_lines = []
    
    @some_data.each do |record|
      csv_lines << "#{record.field1};#{record.field2};#{record.field3}" #and so on
    end
    
    #export csv_lines
    txt = csv_lines.join "\n"
    

    【讨论】:

    • 我编辑了问题并添加了代码输出的图像
    • 能否提供查看源代码?
    • 据我了解leaderboard 方法正在生成要导出的视图?正确的?我想看看leaderboard.html.erb
    • 我没有 html.erb 我有 leaderboard.json.jbuilder
    • 数据正在通过 react 渲染
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2019-04-02
    • 1970-01-01
    • 2015-04-13
    • 2020-11-10
    • 2014-08-10
    相关资源
    最近更新 更多