我正在与Sinatra合作创建一种从行分隔文本文件中获取数据并将其存储在SQLite数据库中的方法。我使用DataMapper创建了我的类,如下所示:
require 'dm-core'
require 'dm-migrations'
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/development.db")
class Names
include DataMapper::Resource
property :id, Serial
property :name, String
property :value1, Integer
property :value2, Integer
property :value3, Integer
property :value4, Integer
property :value5, Integer
property :value6, Integer
property :value7, Integer
property :value8, Integer
property :value9, Integer
property :value10, Integer
property :value11, Integer
end
DataMapper.finalize
DataMapper.auto_upgrade!
在我的app.rb中,我运行以下代码:
require 'sinatra'
require './Names'
require 'rubygems'
require 'data_mapper'
# persist the resource
get '/' do
File.foreach("names-data.txt").each do |line|
name, *values = line.split
params = {:name => name}
values.each_with_index do |value, i|
params[:"value#{i+1}"] = value
end
my_data = Names.new params
my_data.save
end
end
文本文件采用以下格式:
Cat 3 24 2 2 4 6 4 7 6 0 0
Dog 18 0 8 2 42 6 6 4 5 8 0
Mouse 8 1 2 2 4 6 4 7 6 0 0
Rabbit 8 10 8 26 46 2 6 7 6 10 0
当我运行我的代码时,它会创建一个包含正确列的数据库,但不会填充行。相反,它给了我以下错误:
NoMethodError / undefined方法`验证器' for Names:Class Did 你的意思是?可验证?
这是什么意思,我该如何解决?