简体   繁体   English

未定义的方法 - Resque gem的NOMethod错误

[英]Undefined method - NOMethod error with Resque gem

I am trying to generate xml file as a background task using resque gem here is the class which generates xml file .... 我试图使用resque gem生成xml文件作为后台任务这里是生成xml文件的类....

ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV']
require File.expand_path(File.dirname(__FILE__) + "/../../config/environment")
require  'rubygems'
require 'builder'

class GenerateXml
  @queue = :worker

  def self.perform
    file_name = "#{Time.now.strftime('%Y_%m_%d')}_export.xml"

    xml = Builder::XmlMarkup.new(:target => file_name, :indent => 2)
    xml.instruct!(:xml, :encoding => "UTF-8")

    xml.Postings do
      Result.find_in_batches do |result|
        xml.Posting do
          xml.JobID result.job_id
          xml.JobURL result.job_url
        end
      end
    end
  end
end

and my result model from where I am extracting the fields for the xml tags is like this 我从中提取xml标签字段的结果模型是这样的

require 'active_record'

class Result < ActiveRecord::Base
  def job_id
    self.link
  end

  def job_url
    self.link
  end
end

My question is why result.job_url and result.job_id from class GenerateXml is not able to map to Result class correctly? 我的问题是为什么来自GenerateXml类的result.job_url和result.job_id无法正确映射到Result类?

and one more thing the Result class is under app/models directory where as GenerateXml class is under lib/jobs directory 还有一件事, Result类在app / models目录下,而GenerateXml类在lib / jobs目录下

Here is the trace of error. 这是错误的痕迹。

      undefined method `job_id' for #<Array:0xb3f26738>

/home/netserv/RubymineProjects/crawler/lib/jobs/generate_xml.rb:22:in `perform'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/builder-3.0.0/lib/builder/xmlbase.rb:155:in `call'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/builder-3.0.0/lib/builder/xmlbase.rb:155:in `_nested_structures'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/builder-3.0.0/lib/builder/xmlbase.rb:63:in `method_missing'
/home/netserv/RubymineProjects/crawler/lib/jobs/generate_xml.rb:21:in `perform'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/activerecord-3.2.3/lib/active_record/relation/batches.rb:72:in `find_in_batches'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/activerecord-3.2.3/lib/active_record/querying.rb:8:in `__send__'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/activerecord-3.2.3/lib/active_record/querying.rb:8:in `find_in_batches'
/home/netserv/RubymineProjects/crawler/lib/jobs/generate_xml.rb:20:in `perform'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/builder-3.0.0/lib/builder/xmlbase.rb:155:in `call'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/builder-3.0.0/lib/builder/xmlbase.rb:155:in `_nested_structures'
/home/netserv/.rvm/gems/ruby-1.8.7-p357/gems/builder-3.0.0/lib/builder/xmlbase.rb:63:in `method_missing'
/home/netserv/RubymineProjects/crawler/lib/jobs/generate_xml.rb:19:in `perform'

find_in_batches returns arrays . find_in_batches 返回数组 Inside the Postings block, you could do this: Postings块中,你可以这样做:

  Result.find_in_batches do |results|
    results.each do
      xml.Posting do
        xml.JobID result.job_id
        xml.JobURL result.job_url
      end
    end
  end

But why even bother with find_in_batches ? 但为什么甚至打扰find_in_batches

find_in_batches is returning an Array . find_in_batches 返回一个数组

You have to update or create a specific Result and not update an Array of Results , what ever that meant. 您必须更新或创建特定Result而不是更新Results Array ,这意味着什么。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM