2011-03-16 2 views
1

Groupon의 API에서 데이터를 가져와 Google 사이트에 표시하는 Rails 앱을 만들고 있습니다. Rails에서 존재하지 않는 변수를 처리하는 최적의 방법은 무엇입니까?

는 예를 들어, 다음과 데이터 구조를 가지고 : 나는 루프를 원하는 경우 각 거래를 통해

 
--- 
- "id": deal one 
    "options": 
    "redemptionLocations": 
    - "streetAddress1": 123 Any Street" 

- "id": deal two 
    "options": [] 

, 그것이 존재하는 경우 streetAddress1을 표시 레일에 있음을 할 수있는 최적의 방법은 무엇입니까?

답변

0

그냥 수행에만 이상 루프는 객체의 배열이있는 경우

puts "It is #{object.attribute}" if object.attribute.present? 

하고 싶은 :

if(defined? streetAddress1) then 
    print streetAddress1 + " is set" 
end 

그것이 가장 좋은 방법은 present?를 사용하는 것

0

도움이되기를 바랍니다 속성 집합이있는 속성은 select :

을 사용할 수 있습니다.
+0

감사 데이빗. 데이터 구조의 깊이 때문에이 오류가 발생합니다 : NoMethodError : 정의되지 않은 메서드 'streetAddress1'for nil : NilClass – deadkarma

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 
관련 문제