私の Rails アプリでは、一度に 10 個以上のモデルに影響を与える大きな XML ファイルをインポートする必要があります。
このインポートのコードがどこに属するのかわかりません。それを 1 つのモデルに含めるか、影響を受けるすべてのモデルに分割するか、モジュールを使用するか、または懸念事項を使用する必要がありますか?
誰かがそれについての経験があり、私にアドバイスを与えることができますか?
私の Rails アプリでは、一度に 10 個以上のモデルに影響を与える大きな XML ファイルをインポートする必要があります。
このインポートのコードがどこに属するのかわかりません。それを 1 つのモデルに含めるか、影響を受けるすべてのモデルに分割するか、モジュールを使用するか、または懸念事項を使用する必要がありますか?
誰かがそれについての経験があり、私にアドバイスを与えることができますか?
インポートが 1 つの XML ファイルから一度に発生する場合は、インポート スクリプトを記述し/lib/imports
て挿入し、rake タスクなどから呼び出します。クラスメソッドに分解する必要がない限り、個人的には要点がわかりません。
私たちは毎日、いくつかの異なるインポート スクリプトを介して約 600MB の XML をインポートします。それらはすべて、/lib/imports
cron を使用してスケジュールおよび実行される rake タスクから呼び出されます。
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
おそらく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