2010-11-29 6 views
0

나는 yaml 파일에 키, 값 쌍을 덤프 할 Ruby 스크립트를 작업 중입니다. 하지만 내 루프가 어떤 이유로 루프의 마지막 인스턴스 만 잡을뿐입니다. 여러 개의 키 값 쌍이 있어야합니다.Ruby 루프 질문 및 덤프 결과가 YAML 파일

코드 :

# Model for languages Table 
class Language < ActiveRecord::Base 
end 

# Model for elements Table 
class Element < ActiveRecord::Base 
    has_many :element_translations 
end 

# Model for element_translations Table 
class ElementTranslation < ActiveRecord::Base 
    belongs_to :element 
end 

# Find ALL languages 
lang = Language.all 
# Get all elements 
elements = Element.where("human_readable IS NOT NULL") 
info = '' 

elements.each do |el| 
    lang.each do |l| 
    et = el.element_translations.where("language_id = ?", l.id) 
    et.each do |tran| 
     info = { 
     el.human_readable.to_s => tran.content.to_s 
     } 
    end 
    File.open(l.code.to_s + ".yml", "w", :encoding => "UTF-8") do |f| 
     YAML.dump(info, f) 
    end 
    end 
end 

어떤 아이디어가?

답변

1

당신이 할 경우 :

info = { 
    el.human_readable.to_s => tran.content.to_s 
} 

가 한 뜻 :

info << { 
    el.human_readable.to_s => tran.content.to_s 
} 

그렇지 않으면 그냥 info 때마다 재 할당하고 있습니다.

이 작업을 수행하려면 info = ''과 대조적으로 info = [] 어레이를 사용하십시오. 이 루프

et.each do |tran| 
    info = { 
    el.human_readable.to_s => tran.content.to_s 
    } 
end 

반복적으로 다른 값을 하나의 키 el.human_readable.to_s 새로운 해시를 생성에

+0

감사합니다. 이것은 매력처럼 작동했습니다! 나는 새로운 문제가있다. 내 DB에 UTF-8 문자가 있지만 YAML 파일에 데이터를 덤프 할 때 UTF-8 문자가 ... 여기에 어떤 아이디어가 있어야할까요? – dennismonsewicz

+0

@dennis - 아마도 별도의 질문을 물어볼 가치가 있습니다. – Skilldrick

+0

사실 내 문제를 파악할 수있었습니다. 여기에 나의 최신 문제가 있습니다 ... 루프가 발생할 때마다 어떤 이유로 어레이가 재설정되지 않습니다. 따라서 각 YAML 파일에 덤프되는 값은 새 배열 값뿐만 아니라 이전 배열 값이기도합니다 ... – dennismonsewicz

1

. 그러나, 당신은 키가 변경되지 않기 때문에 당신이 1 개 이상의 결과를 얻을 수 없습니다

info = {} 
et.each do |tran| 
    info[el.human_readable.to_s] = tran.content.to_s 
end 

로 다시 것이다 경우에도 - 당신은 반복적으로 서로 다른 값을 지정할 수 있습니다. 정확히 덤핑 받기를 원하십니까? 키 - 밸류 맵이 아닌 배열을 원하면 좋을까요?

info_array = [] 
et.each do |tran| 
    info_array << tran.content.to_s 
end 
info = { el.human_readable.to_s => info_array }