thank_you
thank_you

Reputation: 11107

Array only saves the last value in ruby on rails

I have a loop which outputs information I grabbed from a website. To make the information display in an readable fashion, I insert it into an array that will be displayed on my view page. However, The array does not store all the values retrieved and instead only saves the last value appended to it. In the end I can only get the last value inserted into the array to be displayed.

My controller file...

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

In the view home.html.erb file...

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

So when I go to the home page, I'm only display the last value inserted into the array. What is wrong and how do I fix it?

Upvotes: 0

Views: 272

Answers (1)

Dave Newton
Dave Newton

Reputation: 160191

For one thing you create a new array for every row for every city. (But don't, actually; the assignment is a compare, ==, at the moment.)

For another you set date equal to "#{month} #{day}" instead of doing a comparison.

Upvotes: 1

Related Questions