在rails应用程序中导入CSV时忽略具有空值的行

Gra*_*son 9 ruby csv import ruby-on-rails-3

我有一个应用程序,我允许用户导入CSV数据.

一切正常,直到用户开始导入CSV文件中包含空行的数据.我正在使用以下内容从CSV文件中获取行:

CSV.readlines(import_file, headers: true, skip_blanks: true)
Run Code Online (Sandbox Code Playgroud)

我想如果我添加了skip_blanks的选项,它会这样做,但它没有.关于如何忽略空白行的任何想法.

谢谢!

bjh*_*aid 9

这应该工作

CSV.open(import_file, skip_blanks: true).reject { |row| row.all?(&:nil?) }
Run Code Online (Sandbox Code Playgroud)

编辑

您请求了readlines,它最后在CSV源代码中调用open,但这就是:

CSV.readlines(import_file, skip_blanks: true).reject { |row| row.all?(&:nil?) } 
Run Code Online (Sandbox Code Playgroud)

虽然我没有做任何替补标记,但我觉得开放会表现得更好

CSV.open(import_file, skip_blanks: true, headers: true).reject { |row| row.to_hash.values.all?(&:nil?) }

CSV.readlines(import_file, skip_blanks: true, headers: true).reject { |row| row.to_hash.values.all?(&:nil?) }
Run Code Online (Sandbox Code Playgroud)

以上内容返回CSV :: Row对象的集合


Kei*_*son 8

这将返回CSV :: Table对象.

CSV.parse(import_file, headers: true, skip_blanks: true).delete_if { |row| row.to_hash.values.all?(&:blank?) }