我编写了一个rake任务,将XML Feed导入我的ActiveRecord模型,但遇到了一些麻烦 - XML Feed不会发布任何空列,这会破坏我的迁移工具。如何设计导入器以便跳过空白字段?
我的导入程序看起来像这样
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,
....
假设xml Feed上没有“desc”。我希望我的代码在该实例中忽略“desc”。
错误消息无用:
undefined method `text' for nil:NilClass
但它与文本方法无关。
答案 0 :(得分:0)
您可以使用try method:
if a != nil
a.update_attributes(
:brand => action.at('brandName').try(:text),
:description => action.at('desc').try(:text),
:regular_price => action.at('buynow').try(:text),
....
医生说:
如果接收对象是nil对象或NilClass:NoMethodError异常将引发不,而是返回nil。
答案 1 :(得分:0)
我在Nokogiri查询中查找文字:
if a != nil
a.update_attributes(
:brand => action.at('brandName/text()'),
:description => action.at('desc/text()'),
:regular_price => action.at('buynow/text()'),
...
如果元素不存在,则不会抛出异常。