我需要你的帮助!我有一个简单的数据库,我想作为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
我需要你的帮助!
答案 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中打开(如果您将其作为默认值)。