nil的未定义方法`fetch_value’:使用Roo时的NilClass

我正在尝试使用Roo将数据从Excel电子表格导入Rails应用程序中的表(data_points)。

我收到错误:

undefined method `fetch_value' for nil:NilClass 

并且该错误在行引用了我的data_point.rb文件(参见下面的完整代码摘录):

 data_point.save! 

“应用程序跟踪”说:

 app/models/data_point.rb:29:in `block in import' app/models/data_point.rb:19:in `import' app/controllers/data_points_controller.rb:65:in `import' 

我很困惑,因为我的整个应用程序中的“查找全部”都没有显示fetch_value的实例

这是我的应用程序中的其他代码:

在我的模型中,data_point.rb:

 class DataPoint < ActiveRecord::Base attr_accessor :annual_income, :income_percentile, :years_education def initialize(annual_income, income_percentile, years_education) @annual_income = annual_income @income_percentile = income_percentile @years_education = years_education end def self.import(file) spreadsheet = open_spreadsheet(file) header = spreadsheet.row(1) (2..11).each do |i| annual_income = spreadsheet.cell(i, 'A') income_percentile = spreadsheet.cell(i, 'B') years_education = spreadsheet.cell(i, 'C') data_point = DataPoint.new(annual_income, income_percentile, years_education) data_point.save! end end def self.open_spreadsheet(file) case File.extname(file.original_filename) when ".xlsx" then Roo::Excelx.new(file.path) else raise "Unknown file type: #{file.original_filename}" end end end 

在我的控制器中,我添加了data_points_controller.rb,除了标准的rails框架:

 def import DataPoint.import(params[:file]) redirect_to root_url, notice: "Data points imported." end 

在我正在使用的Excel文件中,标题行的列名与上面提到的DataPoints的3个属性完全相同:annual_income,income_percentile,years_education

Ps我已经看过RailsCast 396:导入CSV和Excel,并多次阅读评论。 我认为我正在努力将示例代码转换为Rails 4和/或我对各个属性的分配(与RailsCast中使用的方法相比)。

在此先感谢您的帮助!

正如我们在评论中发现的那样,你的非铁路练习似乎有一些剩余物。 值得注意的是,覆盖的initialize方法和每个属性的attr_accessor 。 只需要删除它们(并修复DataPoint.new()以获得正确的格式)。

尝试将Active Record与旧数据库一起使用时,我也遇到了类似的错误。 我的问题与我的数据库中的一列被命名为“class”这一事实有关,这导致各种各样的事情失败。 我重命名了旧数据库中的列,一切正常。

故事的道德 – 检查任何保留字的列名。

这是昨天遇到的问题,原因是我定义了一个带有名称class的数据库字段,这是Ruby语言的保留字。 它引起了冲突。

Interesting Posts