2013-08-31 38 views
1

我创建了一个变量,叫node传递一个引入nokogiri :: XML ::元到延迟招聘

doc.xpath('//Product').each do |node| 

并把它传递到延迟的工作是这样的:

delay.create_new_book_record(client_id, user_id, node) 

而且虽然在我将它传入延迟方法之前,我正在传入的变量“节点”看起来像这样:

//node.inspect #=> 
    <Product> 
    <RecordReference>9780857380272</RecordReference> 
    <NotificationType>02</NotificationType> 
    #...etc 

它是pa ssed在这样延迟工作,这看起来像一个空的哈希对我说:

INSERT INTO "delayed_jobs" 
.... 
:create_new_book_record\nargs:\n- 1\n- 2\n- !ruby/object:Nokogiri::XML::Element {}\n"] 

,当我尝试在delayed_job的任务解析节点获取引发错误是

wrong argument type Nokogiri::XML::Element (expected Data) 

所以:如何我是否将Nokogiri :: XML :: Element传递给延迟的作业任务,以便可以在任务内处理它?

回答

1

NVM:您可以简化你传递什么样的参数,并在另一端重新建立一个引入nokogiri对象:

client_id = 1 
user_id = 2 
node_to_s = node.to_s 
book  = Book.where(:blah => blah) 
delay.update_book_record(client_id, user_id, book.first.id, node_to_s) 


def update_book_record(c, u, b, n) 
    book = Book.find(b) 
    node = Nokogiri::XML(n) 
    #... 
+0

这个完美无缺。 – sandre89