1

いくつかのクライアント情報を処理するために、hpricotを使用して3MBのXMLファイルを解析しています...しかし、hpricotは定期的にファイルを解析するのにかなりの時間がかかります。

このデータをMySqlデータベースに(週に1回)入力して、レールを使用してmysqlで直接データを操作できるようにすることを考えています。

このファイルは基本的に、クライアント情報(名前、電子メール、メモなど)を含むXML Googleコンタクトファイルですが、一部の連絡先には、住所、電話などの複数の値フィールドが含まれています。

現在、データを解析しているときに、Contactクラスを生成します

class Contact <
  Struct.new(:name, :email, :telephones, :addresses, :user_address,:notes)
end

telephonesaddresses異なる値の配列が含まれています。

mysqlデータベースでこの構造を再作成する場合は、連絡先、電話、アドレスの3つのテーブルを作成する必要があると思います。

class Contact < ActiveRecord::Base
  has_many :addresses
  has_many :telephones
end

class Telephone < ActiveRecord::Base
  belongs_to :contact
end

class Address < ActiveRecord::Base
  belongs_to :contact
end

Contact classデータベーステーブルにデータをどのように入力しますか?XMLファイルからデータベーステーブルにデータを直接挿入する方法はありますか?

どんなアドバイスやガイダンスも大歓迎です:)ありがとう!

4

1 に答える 1

1

まずはノコギリを試してみて、速いか試してみませんか?

Rails は人々のベスト プラクティスを考え、与えられた問題に対してどのようにプログラムするべきかについてのレシピがあると信じるようになりました。残念ながら、これは当てはまりません。通常の 90% のタスクには魔法はありません。

したがって、いくつかのアドレスといくつかの電話との連絡先があれば、それだけです。

これが私がする方法です:

XML ファイルを解析します。大きすぎる場合は、解析をストリーミングします。その中の連絡先ごとに、フォームが送信された後にコントローラーで通常
出力されるのと同じようにハッシュを出力し、モデルにaccept_nested_attributes_forを使用させます。params[:contact]Contact

contact = {
  :name => xxx, 
  :user_address => xxx, 
  :notes => xxx
  :addresses_attributes => [
    {:some_attribute => xxx, :some_other_attribute => xxx}
    ...
  ],
  :telephones_attributes => [
    { :some_attribute => xxx, :some_other_attribute => xxx}
    ...
  ]
}

残っているのは次のとおりです。

Contact.create(contact)
于 2010-11-07T10:00:59.200 に答える