我正在运行Rails 4应用程序并使用Ransack gem来过滤员工的结果。我已经看到了多个如何限制导出的CSV文件上的列的示例,但没有看到限制行的示例。根据我的理解,以下代码应该在已过滤的员工上调用.to_csv
方法,但目前正在下载所有行。我是否需要将过滤结果的ID数组传递给.to_csv
方法?
查看:
<h3>Download</h3>
<%= link_to "CSV", employees_path(format: "csv") %>
控制器:
def index
@q = Employee.ransack(params[:q])
@q.build_condition
@employees = @q.result(distinct: true)
respond_to do |format|
format.html
format.csv { render text: @employees.to_csv }
end
end
型号:
def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |employee|
csv << employee.attributes.values_at(*column_names)
end
end
end
答案 0 :(得分:2)
我知道这有点延迟,但这就是我解决相同问题的方法。
将链接更改为具有params.merge,以保留过滤的结果。
<%= link_to "CSV", employees_path(params.merge(format: "csv")) %>
我还必须将format.csv更改为以下内容才能使其正常工作:
format.csv { send_data @employees.to_csv, filename: "employees.csv" }
希望这会有所帮助。
答案 1 :(得分:0)
在这一行中,您将添加所有员工模型。
all.each do |employee|
相反,你应该有像
这样的东西def self.to_csv(employees)
..
employees.each do |employee|
..
end
并像这样调用这个类方法:
format.csv { render text: Employee.to_csv(@employees) }