我正在开发一个Rails应用程序,该应用程序从Groupon的API中提取数据并将其显示在我们的网站上。
采用以下数据结构,例如:
--- - "id": deal one "options": "redemptionLocations": - "streetAddress1": 123 Any Street" - "id": deal two "options": []
如果我想遍历每笔交易,并显示streetAddress1(如果存在),那么在Rails中执行此操作的最佳方式是什么?
答案 0 :(得分:0)
只是做:
if(defined? streetAddress1) then
print streetAddress1 + " is set"
end
希望有所帮助
答案 1 :(得分:0)
最佳做法应该是使用present?
:
puts "It is #{object.attribute}" if object.attribute.present?
如果您有一个对象数组,并且只想对那些具有属性集的对象进行循环,则可以使用select
:
array.select{|object| object.attribute.present?}.each do |object|
...
end
答案 2 :(得分:0)
如果你有一个深层嵌套的结构,你可以创建一个自定义函数来检查一个键是否存在并显示其值:
def nested_value hash, *args
tmp = hash
args.each do |arg|
return nil if tmp.nil? || !tmp.respond_to?(:[]) || (tmp.is_a?(Array) && !arg.is_a?(Integer))
tmp = tmp[arg]
end
tmp
end
例如,如果您从示例中加载了以下YAML:
k = [
{ "id"=>"deal one",
"options"=>{"redemptionLocations"=>[{"streetAddress1"=>"123 Any Street\""}]}},
{ "id"=>"deal two",
"options"=>[]}]
然后你可以这样做:
nested_value k.first, 'options', 'redemptionLocations', 0, 'streetAddress1'
=> "123 Any Street \""
nested_value k.last, 'options', 'redemptionLocations', 0, 'streetAddress1'
=> nil