0

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

xmlタグのフィールドを抽出する結果モデルは次のようになります

require 'active_record'

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

  def job_url
    self.link
  end
end

私の質問は、クラスのresult.job_urlとresult.job_idがクラスに正しくGenerateXmlマップできないのはなぜですか?Result

Resultクラスがapp/modelsディレクトリの下にあるもう1つのことは、クラスがGenerateXmllib/jobsディレクトリの下にあることです。

これがエラーの痕跡です。

      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'
4

2 に答える 2

2

find_in_batches 配列を返します。ブロック内で、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

しかし、なぜ気にするのfind_in_batchesですか?

于 2012-05-14T12:01:49.547 に答える
0

find_in_batchesArrayを返しています。

特定のものを更新または作成する必要があり、 of をResult更新する必要はありません。ArrayResults

于 2012-05-14T12:02:45.707 に答える