2016-10-22 6 views
0

での表の値は、私はシンプルなシナトラアプリを作り、以下の「numbers.csv」ファイル持っている:タスクを印刷することである::シナトラ

Name,Title,Phone 
Ally Smith,Manager,888-552-444 
Rick Jones,Director,888-552-447 
Hayley Bowman,Accountant,888-552-424 

をerbファイル内の名前と電話番号。私は、オブジェクトとハッシュでの作業の私の恐怖を克服しようとしています今

<tr> 
    <th>Name</th> 
    <th>Number</th> 
    </tr> 

    <% @names.each do |row| %> 
    <tr> 
    <td> <%= row[0] %> </td> 
    <td> <%= row[2] %> </td> 
    <tr> 
    <% end %> 

ので、私は午前:

get '/' do 
    # turns CSV into array with nested arrays 
    @names = CSV.read('names.csv') 
    # delete headers 
    @names.shift 
    erb :index 
end 

と各ループ:

私はもともと、ネストされた配列を持つこの問題を解決し

get '/' do 
    # turns CSV into object with key value pairs 
    @numbers = CSV.read('numbers.csv', headers:true) 
    erb :index 
end 

私はCSV :: Tableオブジェクトを使用する利点を知っていますiは、キー名に続いて、行ごとにカウンタで

@names[i]["Name"] 
@names[i]["Phone"] 

:ヘッダi番目の私はそうのような値にアクセスできることを意味します。

私はerbファイルにwhileループを書き込もうとしました - 失敗します。また、私が理解しているforeachループはCSVメソッドであり、それに応じて自分のコードを変更しました - 失敗します。

行の繰り返しと特定のキーの呼び出しに問題があります。

私は正しいループを使用しているかわかりません。

アドバイスをいただければ幸いです。私は時間:(

答えて

1

コードのためにこれに取り組んできました

は結構です、私は以下の表示方法:。

> numbers = CSV.read('numbers.csv', headers:true) 
> numbers.each do |row| 
>  puts "#{row['Name']} - #{row['Phone']}" 
> end 

Ally Smith - 888-552-444 
Rick Jones - 888-552-447 
Hayley Bowman - 888-552-424 

私はあなたの問題はあなたの変数だと思うあなたは@numbers代わりの@namesを使用する必要があります。あなたの2番目の例:

@names[i]["Name"] # should be @numbers[i]['Name'] 
+0

ありがとうございました@JCorcuera。 – dho

関連する問題