/ / Przekaż element Nokogiri :: XML :: Element do zadania opóźnionego - ruby-on-rails, ruby, nokogiri, delayed-job

Przekaż element Nokogiri :: XML :: w opóźnioną pracę - ruby-on-rails, ruby, nokogiri, delayed-job

Tworzę zmienną, zwaną node:

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

i przekazać go do opóźnionej pracy w następujący sposób:

delay.create_new_book_record(client_id, user_id, node)

i chociaż zmienna "węzeł", przez którą przechodzę, wygląda dokładnie tak, zanim przejdę do metody opóźnionej:

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

jest przekazywana w ten sposób do opóźnionej pracy, która wygląda jak pusty hasz dla mnie:

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

A błąd, który zostanie zgłoszony podczas próby przeanalizowania węzła w zadaniu delayed_job jest

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

A więc: jak przekazać element Nokogiri :: XML :: Element do zadania z opóźnionym zadaniem, aby można je było przetworzyć w ramach zadania?

Odpowiedzi:

1 dla odpowiedzi № 1

nvm: możesz uprościć to, co przekazujesz jako argumenty i ponownie zbudować obiekt nokogiri na drugim końcu:

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)
#...