1

私の Rails アプリでは、一度に 10 個以上のモデルに影響を与える大きな XML ファイルをインポートする必要があります。

このインポートのコードがどこに属するのかわかりません。それを 1 つのモデルに含めるか、影響を受けるすべてのモデルに分割するか、モジュールを使用するか、または懸念事項を使用する必要がありますか?

誰かがそれについての経験があり、私にアドバイスを与えることができますか?

4

3 に答える 3

3

インポートが 1 つの XML ファイルから一度に発生する場合は、インポート スクリプトを記述し/lib/importsて挿入し、rake タスクなどから呼び出します。クラスメソッドに分解する必要がない限り、個人的には要点がわかりません。

私たちは毎日、いくつかの異なるインポート スクリプトを介して約 600MB の XML をインポートします。それらはすべて、/lib/importscron を使用してスケジュールおよび実行される rake タスクから呼び出されます。

于 2013-03-11T10:21:34.627 に答える
3

app/models/tasks/somename_importer.rb を使用して、そこにすべてのインポーターのものをカプセル化します。インポートする実際のデータ オブジェクトのモデルを作成することもできます。

class ImportedObject
  attr_accessor :have, :some, :accessor, :to, :hold, :data
  def initialize(data, *opts)
    # move data to instance variables
  end

  def to_object
    Object.new(some: mapping)
  end
end

class Tasks::SomeNameImporter
  def initialize
    # maybe setup some logging and stuff
  end

  def perform
    # fetch data from some source via http or file or ftp and iterate over appropriate items
    data.each do |item|
      imported = ObjectToImport.new(item)

      # you can do whatever you want with your imported data
      object   = imported.to_object
      if object.valid?        
        object.save
      else
        # do some logging 
      end
    end    
  end
end
于 2013-03-11T14:53:26.803 に答える
1

おそらくxmlと対話するためのいくつかのメソッドも必要になる可能性があると仮定すると、私は次のようになります

class XmlBase < ActiveRecord::Base
  #import xml files

  def method_to_parse_xml
      #code
  end
end

モデル内 (xml ファイルが必要)

class User < XmlBase

end

class Project < XmlBase

end

#normal models
class Company < ActiveRecord::Base

end
于 2013-03-11T10:05:41.583 に答える