0

Web サイトから取得した情報を出力するループがあります。情報を読みやすい形式で表示するために、ビュー ページに表示される配列に情報を挿入します。ただし、配列は取得したすべての値を保存するわけではなく、最後に追加された値のみを保存します。最終的に、配列に挿入された最後の値のみを表示することができます。

私のコントローラーファイル...

def home
  scrape()
end

private

def scrape 

require 'rubygems'
require 'nokogiri'
require 'open-uri'


time = Time.new
month = I18n.t("date.abbr_month_names")[time.month]
day = time.day 
@strings = []

#United States
cities = [
   "sfbay", "losangeles", "athensga", "phoenix", "santabarbara", "denver",
   "panamacity", "miami", "austin", "bakersfield", "keys", "newyork"
]

cities.map do |city|

#Search Terms
search_terms = ["mechanic", "car", "tech"]

search_terms.map do |term|

  escaped_term = CGI.escape(term)

  url = "http://#{city}.craigslist.org/search/jjj?query=#{escaped_term}&catAbb=jjj&
  srchType=A"

  doc = Nokogiri::HTML(open(url))
  
  doc.css(".row").map do |row|
    
      date = row.css(".itemdate").text
    
      a_tag = row.css("a")[0]

      text = a_tag.text

      link = a_tag[:href]
    
      @strings == []

      if date = "#{month} #{day}"
        @strings << "#{date} #{text} #{link}"
      end

  end

 end

end

end

ビューhome.html.erbファイルで...

<%= raw(@strings.join('<br />')) %>

そのため、ホームページに移動すると、配列に挿入された最後の値のみが表示されます。何が問題で、どうすれば修正できますか?

4

1 に答える 1

1

1 つには、すべての都市のすべての行に新しい配列を作成します。(しかし、実際にはしないでください。代入は現時点では比較 == です。)

別の場合、比較を行う代わりに日付を「#{month} #{day}」に設定します。

于 2012-11-27T01:24:52.883 に答える