1

私はレールに非常に慣れていない (< 1 か月) ので、足を濡らすために天気アプリを作成することにしました。私は HTTParty を使用して、郵便番号に基づいて Weather Underground フィードを取得しており、それを通じて気象情報を渡します...

短編小説 (何が起こるのか)

ユーザーがホームページで郵便番号を入力すると、郵便番号が URL を介して渡されるため、HTTParty は適切な XML ファイルを提供できます。

問題

愚かな郵便番号を取得して、HTTParty が機能しているモデルに戻すことはできません。

私はそれを理解するためにデバッグしました:

http://localhost:3000/12345

実際にパラメーターを渡します-私はそれをどこにルーティングしましたか?zip = 12345が一種のパーマリンクに変換されます:. デバッグ ダンプには次のように表示されます。

zip: '37064'

だから私は郵便番号が少なくともそこにあることを知っています. ただし、そのパラメーターを取得して、HTTParty の get 要求を含むモデルに渡す必要があります。

基本は次のとおりです。

fetch_weather.rb (モデル)、weather_controller、weather#weather (ビュー)、routes.rb ファイル

http://pastebin.com/jbrffU08

(言及する価値のあることの1つは、「37064」がURLを介して渡された郵便番号に置き換えられることです...これはテスト目的のためだけにあります)

明らかに、これをもっとやりたいと思っていますが、ここが出発点です。

私の質問

これは正しい方法 (「レールの方法」) ですか?

a) その場合、正しい XML フィードを取得できるように、クエリ文字列を取得してモデルを適切に更新するにはどうすればよいですか?

b)そうでない場合、それを行う「正しい」方法は何ですか?少なくとも正しい方向に向けることはできますか?

私は WordPress-Dev-Turned-Rails-Dev なので、これに関するフィードバックをお待ちしています。

4

1 に答える 1

1

モデルは、ビュー、クエリ文字列などすべてに関与するべきではありません。彼らの仕事はデータを管理することです。ただし、クエリ文字列を管理するのはコントローラーの仕事です。

class WeatherController < ApplicationController
  def weather
    # extract zip code from query string and pass to the model
    @weather_lookup = FetchWeather.new params[:zip]
  end
end

class FetchWeather < ActiveRecord::Base
attr_accessor :temperature, :condition, :zip

def initialize zip
  # snip

 self.zip = zip
end

 def fetch_weather
    HTTParty.get("http://api.wunderground.com/api/0299ecb9aa94e332/hourly/q/" + zip + ".xml")
 end

end
于 2013-01-27T06:30:38.893 に答える