将rails中的sqlite 3数据库作为csv文件下载

时间:2018-01-27 18:16:24

标签: ruby-on-rails sqlite ruby-on-rails-5

我需要你的帮助!我有一个简单的数据库,我想作为csv文件下载。

这是数据库:

class CreateTeams < ActiveRecord::Migration[5.1]
  def change
    create_table :teams do |t|
      t.integer :name
      t.integer :match
      t.string :scout

      t.timestamps
    end
  end
end

我想在程序上有一个按钮,我正在下载数据库,可能在index.html.erb中。

这是我的团队控制器:

class TeamController < ApplicationController
  def index
    @teams = Team.all    
  end

  def new
    @team = Team.new
  end    
  def create
    @team = Team.new(team_params)

    respond_to do |format|
      if @team.save
        format.js
        redirect_to '/team/index'
      else

        format.json { render json: @team.errors.messages, status: :unprocessable_entity }
      end
    end
  end

  private

    def team_params
      params.require(:team).permit(:name, :scout, :match)
    end
end

我需要你的帮助!

3 个答案:

答案 0 :(得分:0)

您可以读取模型属性并将其推送到csv字符串。

def index
  csv_string = CSV.generate do |csv|
    # header
    csv << Team.attribute_names
    Team.all.each do |team|
      csv << team.attributes.values
    end
  end
  respond_to do |format|
    format.csv { render csv: csv_string, filename: 'teams.csv' }
  end
end

或者您也可以使用这个ruby gem comma,它与您需要的完全相同。在您的Gemfile中添加gem,安装,您可以像以下一样使用它:

def index
  respond_to do |format|
    format.csv { render csv: Team.limit(50) }
  end
end

答案 1 :(得分:0)

把它放在你的模型中:

def self.to_csv
  attributes = %w{name match scout}
  CSV.generate(headers: true) do |csv|
  csv << attributes

  all.each do |team|
    csv << team.attributes.values_at(*attributes)
  end
end
end

然后在您的视图中(在控制器中添加索引操作):

<%= link_to "CSV", teams_path(format: "csv") %>

然后在控制器中添加

@teams = Team.all
  format.csv { send_data @teams.to_csv, filename: "Teams-#{Date.today}.csv"

你应该好好去。如果您没有使用&#34;资源&#34;

,您可能需要将索引操作添加到路线中

答案 2 :(得分:0)

我找到了一种方法,但感谢所有发布回答的人!

首先,你把它放在你的rails模型中:

def self.to_csv
    attributes = %w{number match scout}
    CSV.generate(headers: true) do |csv|
    csv << attributes

    all.each do |team|
      csv << team.attributes.values_at(*attributes)
    end
  end
end

然后你把它放在你的路线中:

resources :teams

然后将其放入Teams控制器索引操作中:

  def index    
    @team = Team.all
    respond_to do |format|
      format.html
      format.csv {send_data @team.to_csv}
    end
  end

并在您的application.rb中添加

require 'csv'

如果您想查看代码,请转到&#39; localhost:3000 / teams.csv&#39;它会将其下载为csv文件,它将在Microsoft Excel中打开(如果您将其作为默认值)。