0

私はこのコードを持っています:

モデル:

class WeatherLookup 
    attr_accessor :temperature, :icon, :condition, :zip, :fcttext

    def fetch_weather(city)
      HTTParty.get("http://api.wunderground.com/api/api_key/forecast/lang:NL/q/IT/#{city.slug}.xml")
     end

    def initialize
      weather_hash = fetch_weather
    end

    def assign_values(weather_hash)
      hourly_forecast_response = weather_hash.parsed_response['response']['forecast']['txt_forecast']['forecastdays']['forecastday'].first 
      self.fcttext = hourly_forecast_response['fcttext']
      self.icon = hourly_forecast_response['icon_url']

   end


   def initialize(city)  
    @city = city
    weather_hash = fetch_weather(city)
    assign_values(weather_hash)
   end

end

都市コントローラー:

@weather_lookup = WeatherLookup.new(@city)

シティビュー:

 = @weather_lookup.fcttext 
        = image_tag @weather_lookup.icon

これは正常に機能します...forecastdays コンテナーの最初のデータセットを取得します。API からの xml は次のようになります。

<response>
<version>0.1</version>
<termsofService>
http://www.wunderground.com/weather/api/d/terms.html
</termsofService>
<features>
<feature>forecast</feature>
</features>
<forecast>
<txt_forecast>
<date>2:00 AM CEST</date>
<forecastdays>
<forecastday>
<period>0</period>
<icon>clear</icon>
<icon_url>http://icons-ak.wxug.com/i/c/k/clear.gif</icon_url>
<title>zondag</title>
<fcttext>
<![CDATA[ Helder. Hoog: 86F. Light Wind. ]]>
</fcttext>
<fcttext_metric>
<![CDATA[ Helder. Hoog: 30C. Light Wind. ]]>
</fcttext_metric>
<pop>0</pop>
</forecastday>
<forecastday>
<period>1</period>
<icon>clear</icon>
<icon_url>http://icons-ak.wxug.com/i/c/k/clear.gif</icon_url>
<title>zondagnacht</title>
<fcttext>
<![CDATA[ Helder. Laag: 61F. Light Wind. ]]>
</fcttext>
<fcttext_metric>
<![CDATA[ Helder. Laag: 16C. Light Wind. ]]>
</fcttext_metric>
<pop>0</pop>
</forecastday>
<forecastday>
<period>2</period>
<icon>partlycloudy</icon>
<icon_url>http://icons-ak.wxug.com/i/c/k/partlycloudy.gif</icon_url>
<title>maandag</title>
<fcttext>
<![CDATA[ Gedeeltelijk bewolkt. Hoog: 84F. Light Wind. ]]>
</fcttext>
<fcttext_metric>
<![CDATA[ Gedeeltelijk bewolkt. Hoog: 29C. Light Wind. ]]>
</fcttext_metric>
<pop>20</pop>
</forecastday>
<forecastday>
<period>3</period>
<icon>clear</icon>
<icon_url>http://icons-ak.wxug.com/i/c/k/clear.gif</icon_url>
<title>maandagnacht</title>
<fcttext>
<![CDATA[ Gedeeltelijk bewolkt. Laag: 63F. Light Wind. ]]>
</fcttext>
<fcttext_metric>
<![CDATA[ Gedeeltelijk bewolkt. Laag: 17C. Light Wind. ]]>
</fcttext_metric>
<pop>0</pop>
</forecastday>

ループによって予測コンテナー内のすべての foracasts にアクセスしたいのですが、hourly_forecast 変数 (.first) を .all または none に変更すると、「文字列を整数に変換できません」というエラー メッセージが表示されます。

これを修正するアイデアはありますか?\

4

1 に答える 1

0

hourly_forecastから.firstを削除すると、単一のアイテムではなくコレクションが返されます。これは、ビューが正しく機能しないことを意味するため、ビューを更新してコレクションをレンダリングする必要があります。これはパーシャルで行うのが最適です。

city_view は次のようになります。

= render partial: "weather_lookup", collection: @weather_lookup

次に、_weather_lookup.html.hamlという名前のパーシャルを作成し、以下を含めます。

= @weather_lookup.fcttext 
        = image_tag @weather_lookup.icon

パーシャルのファイル名の前にあるアンダースコアは重要です。これは Rails の規則であるため、省略しないでください。表示すると、パーシャルはコレクション内のすべてのアイテムに対して複数回レンダリングされます。

于 2012-09-09T12:47:20.717 に答える