获取十六进制数而不是活动记录

时间:2016-02-19 13:55:59

标签: ruby activerecord

我希望icao使用station = Station.find_by(icao: "PADK")获取一个电台,而不是获得类似的内容

#<Station 
          id: 1, aflag: "T", airport_id: nil, auto: "", 
          cd: "AK", country_code: "US", elev: "4", 
          iata: "ADK", icao: "PADK", latitude: 51.53, 
          longtitude: -176.39, mflag: "X", nexrad: "", 
          office: "", plotting: "7", station: "ADAK NAS", 
          synop: "70454", upair: "", created_at: "2016-02-18 20:19:58",
          updated_at: "2016-02-19 13:22:11">

我得到#<Station:0x00564249c81bf8>。问题在哪里?

它向我显示了ruby控制台中所需的输出,但在.rb文件中它显示了十六进制。

2 个答案:

答案 0 :(得分:1)

在控制台中,您获得Station#inspect的结果,可能由awesome_print调整。在Web界面中,您将获得Station#to_s的结果,它以较简洁的方式输出相同的对象。

在这两种情况下,它都是同一个对象,拥有它的所有属性。尝试:

station = Station.find_by(icao: "PADK")
if station
  puts "The station longtitude is #{station.longtitude}"
  puts station.inspect
else
  puts "There is no such station!"
end

请注意,如果多次出现带有参数的工作站,您将获得一个关联数组,而不是特定的结果。在这种情况下,您可能希望迭代find_by的响应:

stations = Station.find_by(icao: "PADK")
stations.each do |station|
  puts station.whatever
end

Ruby控制台仍然会尝试打印整个数组,你会看到它是它所包含的唯一Station实例。

答案 1 :(得分:0)

您需要从Station模型中指定所需的属性,否则您将获得整个已创建的实例。

示例,假设当“icao”为“PADK”时,您需要在Station模型中使用“station”属性,那么您应该执行以下操作:

station = Station.find_by(icao: 'PADK').station

如果您需要更多属性,只需将它们存储在不同的变量中:

  padk_station = Station.find_by(icao: 'PADK')
  country_code = padk_station.country_code
  synop = padk_station.synop

等等。