我目前正在尝试读取 PBS 上记录作业的 xml 文件。我已成功解析代码,但无法将对象插入我的数据库,我收到此错误:
“当你没有预料到的时候,你得到了一个 nil 对象! 您可能期望一个 ActiveRecord::Base 的实例。 评估 nil.delete 时发生错误”
这是我的模型:
require 'xml/libxml'
class Job < ActiveRecord::Base
JOB_DIR = File.join('data', 'jobs')
attr_reader :jobid, :user, :group, :jobname, :queue, :ctime
attr_reader :qtime, :etime, :start, :owner
def initialize(jobid, user, group, jobname, queue, ctime, qtime, etime, start, owner)
@jobid, @user, @group, @jobname, @queue = jobid, user, group, jobname, queue
@ctime, @qtime, @etime, @start, @owner = ctime, qtime, etime, start, owner
end
def self.find_all()
jobs = []
input_file = "#{JOB_DIR}/1.xml"
doc = XML::Document.file(input_file)
doc.find('//execution_record').each do |node|
jobs << Job.new(
node.find('jobid').to_a.first.content,
node.find('user').to_a.first.content,
node.find('group').to_a.first.content,
node.find('jobname').to_a.first.content,
node.find('queue').to_a.first.content,
node.find('ctime').to_a.first.content,
node.find('qtime').to_a.first.content,
node.find('etime').to_a.first.content,
node.find('start').to_a.first.content,
node.find('owner').to_a.first.content
)
end
jobs
end
end
我的模型 Controller :
class JobController < ApplicationController
def index
@jobs = Job.find_all()
end
def create
@jobs = Job.find_all()
for job in @jobs
job.save
end
end
end
如果有任何帮助,我将不胜感激...谢谢!
最佳答案
我不确定您看到的错误消息的原因,因为我看不到您尝试调用 delete
方法的任何地方,但这看起来确实像是一个ActiveRecord 的使用有点困惑。
如果您有一个 jobs
数据库表,其中包含字段 jobid
、user
、group
、jobname
等,然后 ActiveRecord 将为这些创建访问器方法,并且您不应该使用 attr_reader
或覆盖 initialize
。您也不应该设置值实例变量(@jobid
等)。如果您的表上没有此类字段,则当前代码中没有任何内容可以设置将 XML 中的值映射到数据库字段。
您的 def self.find_all
方法可能应该类似于:
def self.build_from_xml
jobs = []
input_file = "#{JOB_DIR}/1.xml"
doc = XML::Document.file(input_file)
doc.find('//execution_record').each do |node|
jobs << Job.new(
:jobid => node.find('jobid').to_a.first.content,
:user => node.find('user').to_a.first.content,
...
Rails 曾经有一个自己的 find_all
方法来从数据库中检索所有现有记录,因此您的方法名称可能有点误导。 Rails 倾向于使用 build 动词来表示创建一个新的模型对象,但还不保存它,所以这就是为什么我使用像 build_from_xml 这样的名称
.
关于mysql - Ruby libxml 解析并插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3289196/