0

以下に示すように、HTMLを配列に解析しています。データを配列に取得してから、データをデータベースにプッシュできます。配列データの1行は次のとおりです。

{:address=>"6222 Lodgepole Dr", :members=>["Diana L Dillard", "Kemberly J Williams", "George S Williams Iii"]}

データベースの結果は次のとおりです。

Master                 Neighbor                     Name

7545 XYZ Dr     --- - 8283 Southern Watch Pl    --- - - Diana L Dillard - Kemberly J Williams - George S Williams Iii

これらは私の質問です:

  1. Address.create配列の最初のメンバー(この例Diana L Dillardでは、すべての名前ではなく「名前」フィールド)にのみ挿入するループを取得するにはどうすればよいですか?理想的には、最初に1つのフィールドを作成し、次に他のすべてのフィールドに別のフィールドを作成したいと思います。
  2. これらのダッシュ「---」がデータに挿入されるのはなぜですか?私はそれらを望んでいません。

これは私の現在のコードです:

url = "XYZ"

doc = Nokogiri::HTML(open(url))

results = []

# parse .single tags
doc.css('.single').each do |single_div|

  res = {}
  res[:address] = single_div.at_css('span.address').text
  res[:members] = single_div.css('li.basic_info').collect{|el| el.text.strip}
  results << res
end

results.each do|address|
  puts "#{address}: #{members}"
  Address.create(:neighboradd => "#{address}", :master => '7545 XYZ Dr', :name => "{members}")
end
4

1 に答える 1

0

This

results.each do |address|
  puts "#{address}: #{members}"
  Address.create(
    :neighboradd => "#{address}",
    :master => '7545 XYZ Dr',
    :name => "{members}"
  )
end

Should be something like

results.each do |res|
  puts "#{res[:address]}: #{res[:members]}"
  Address.create(
    :neighboradd => res[:address],
    :master => '7545 XYZ Dr',
    :name => res[:members].join(', ') # this should be "#{res[members]}"? (with "#")
  )
end

The --- is because you were using the whole hash for :neighboradd.

If you want only the first member:

    :name => res[:members].first
于 2013-02-23T03:24:28.690 に答える