2017-05-27 19 views
0

私はかなりプログラミングに新しいし、私のコードのいくつかのヘルプ/フィードバックが必要です。 私の目標は、正常に動作している私のデータを掻き集め、そのデータをユーザに番号付きリストで表示することです。私はこのデータを表示するのが難しいです。私のプログラムは私のメソッドを単純にスキップしてエラーを戻すことはありません。どんなヘルプ/フィードバックにも事前に感謝しています!Rubyでデータを反復処理する方法は?

class BestPlaces::Places 
    attr_accessor :name, :population, :places 
    @@places = [] 

    def self.list_places 
    # puts "this is inside list places" 
    self.scrape_places 
    end 

     def self.scrape_places 
     doc = Nokogiri::HTML(open("https://nomadlist.com/best-cities-to-live")) 
      places = doc.search("div.text h2.itemName").text 
      rank = doc.search("div.rank").text 

      places.collect{|e| e.text.strip} 
       puts "you are now in title" 
       @@places << self.scrape_places 
       puts "#{rank}. #{places}" 
      end 
      end 
     end 

CLI Page: 
class BestPlaces::CLI 

    def list_places 
    puts "Welcome to the best places on Earth!" 
    puts @places = BestPlaces::Places.list_places 
    end 

    def call 
    list_places 
    menu 
    goodbye 
    end 
end 
+1

コードをどのように実行しますか? – spickermann

+0

ローカル、自分のbinフォルダ内のCLIプログラム – schall

+0

あなたのメソッド、つまり 'BestPlaces :: Places.list_places'(私はあなたのエントリーポイントだと思います)を呼び出さなければなりません。これをファイルの一番下に置きます。 '@@ places << self.scape_places'という行には無限ループがあります。 – Anthony

答えて

0

あり、このコードで対処することができ、いくつかのものがありますが、まずは、リワークを見てみましょう:

require 'nokogiri' 
require 'open-uri' 

module BestPlaces 

    class Places 
    attr_accessor :name, :population, :places 

    def initialize 
     @places = [] 
    end 

    def scrape_places 
     doc = Nokogiri::HTML(open("https://nomadlist.com/best-cities-to-live")) 
     places = doc.search("div.text h2.itemName") 
     ranks = doc.search("div.rank") 
     places.each{|e| @places << e.text.strip} 
     puts "you are now in title" 
     @places.each do |place| 
     i = @places.index(place) 
     puts "#{ranks[i].text}. #{place}" 
     end 
    end 

end 

class CLI 

    def list_places 
    puts "Welcome to the best places on Earth!" 
    BestPlaces::Places.scrape_places 
    end 

    def call 
    list_places 
    menu 
    goodbye 
    end 

end 

end 

あなたが不完全なモジュール/クラスのセットアップになりそうだものを持っています。一つは、上記のようになどを呼び出すことができます。

bp = BestPlaces::Places.new 
bp.scrape_places 

@@変数は、我々は場所、クラス内でアクセスする必要のある値を保持する代わりに@placesを使用することができ、不要だっ配置します。また、nokogiriは検索結果に.textメソッドを使用するときに文字列オブジェクトを返します。つまり、配列のように繰り返し処理することはできません。私はこれが役立つことを願っています

+0

みなさんありがとう!私は本当にフィードバックに感謝します! – schall

+0

これは私のプッシュメソッドがルビによって識別されない理由ですか?私のプログラムは私の '<<'をプッシュメソッドとして認識していません。 – schall

+0

self.scrape_placesにあるプッシュメソッドを参照している場合は、そこになかった値をプッシュしようとしていました。このメソッドには実際に何かを返すreturn文がありませんでした。また、[ここ](https://stackoverflow.com/questions/1023146/is-it-good-style-to-explicitly-return-in-ruby)と[ここ](https:// stackoverflow .com/questions/10569529/ruby​​-difference-between-array-and-arraypush)を使用して、リターンステートメントと '<<'メソッドの使用方法を知ることができます。 –

関連する問題