Ruby on rails 使用rake任务和Nokogiri将XML提要保存到数据库时发生导入错误

Ruby on rails 使用rake任务和Nokogiri将XML提要保存到数据库时发生导入错误,ruby-on-rails,ruby,database,nokogiri,Ruby On Rails,Ruby,Database,Nokogiri,我编写了一个rake任务,将一个XML提要导入到我的ActiveRecord模型中,但遇到了一些麻烦-XML提要不会发布任何空列,这破坏了我的迁移工具。如何设计导入器,使其跳过空字段 我的进口商看起来像这样 desc "Import XML Feed into Items Database v20121116" task :new_import_items => :environment do require 'nokogiri' require 'open-uri' doc = N

我编写了一个rake任务,将一个XML提要导入到我的ActiveRecord模型中,但遇到了一些麻烦-XML提要不会发布任何空列,这破坏了我的迁移工具。如何设计导入器,使其跳过空字段

我的进口商看起来像这样

desc "Import XML Feed into Items Database v20121116" 
task :new_import_items => :environment do

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::XML(File.open("#{Rails.root}/lib/tasks/datafeed.xml"))

actions = doc.xpath("/merchantProductFeed/merchant/prod") 

actions.each do |action|

a = Item.where("affiliate_product_id = ?", action.css("pId").text).first


if a != nil

  a.update_attributes(

    :brand => action.at('brandName').text, 
    :description => action.at('desc').text, 
    :regular_price => action.at('buynow').text,

    ....
假设“desc”在xml提要上不可用。我希望我的代码在该实例中忽略“desc”

错误消息无效:

undefined method `text' for nil:NilClass
但它与文本方法无关。

您可以使用:

医生说:

如果接收对象是nil对象或NilClass:将不会引发NoMethodError异常,而是返回nil


我会在Nokogiri查询中查找文本:

if a != nil
  a.update_attributes(
    :brand => action.at('brandName/text()'), 
    :description => action.at('desc/text()'), 
    :regular_price => action.at('buynow/text()'),

    ...

如果元素不存在,则不会引发异常。

这就成功了!谢谢Yoshiji先生,感谢您的快速回复。
if a != nil
  a.update_attributes(
    :brand => action.at('brandName/text()'), 
    :description => action.at('desc/text()'), 
    :regular_price => action.at('buynow/text()'),

    ...