1

我对 Rails 非常陌生(< 1 个月),并决定构建一个天气应用程序来让我的脚湿透。我正在使用 HTTParty 获取基于邮政编码的 Weather Underground 提要,并将通过它传递天气信息......

短篇小说(应该发生的事情)

用户在主页上输入邮政编码,邮政编码通过 URL 传递,因此 HTTParty 可以提供适当的 XML 文件。

问题

我一辈子都无法得到愚蠢的邮政编码来让它回到 HTTParty 正在做的事情的模型。

我已经调试弄清楚:

http://localhost:3000/12345

确实会传递一个参数 - 我将它路由到 ?zip=12345 被转换为各种永久链接的位置:。调试转储确实显示:

zip: '37064'

所以我知道邮政编码至少在那里。但是,我需要能够获取该参数并将其传递给包含 HTTParty 获取请求的模型。

以下是基础知识:

fetch_weather.rb(模型)、weather_controller、weather#weather(视图)、routes.rb 文件

http://pastebin.com/jbrffU08

(值得一提的是:“37064”将替换为通过 URL 传递的邮政编码......它只是用于测试目的)

显然我想用这个做更多,但这是起点。

我的问题

这是正确的方法(“rails 方式”)吗?

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 回答