2010-12-10 7 views
2

그림 앨범 용 index.xml.builder 파일에 문제가 있습니다. 나는 그것이 단순한 무언가다고 확신하지만 Builder :: XmlMarkup 문서에서 해결책을 찾지 못한 후 나를 미치게 만들었다.레일 3 - XML ​​빌더

xml.instruct! 
xml.gallery { 
@albums.each { |g| 
    xml.album(g.name, {:title => g.name, 
        :description => g.description, 
        :lgpath => "[PATH]", 
        :tnpath => "[PATH]", 
        :fspath => "[PATH]"}) 
    g.pictures.each { |p| 
     xml.img nil, :src => "#{p.resource_file_name}" 
    } 
    } 
} 

그러나, 이것은 다음과 같은 생산 : 당신이 볼 수 있듯이

<gallery> 
    <album title="..." description="..." lgpath="..." tnpath="..." fspath="..."></album> 
    <img src="17112.jpg"/> 
    <img src="17113.jpg"/> 
    <img src="17114.jpg"/> 
    <img src="17115.jpg"/> 
    <album... 

, 내가 </album> 태그 내에 중첩 된 이미지를 얻을 수 없습니다 나는 여기에 내 현재도이다. 그 아이디어를 얻으려면 어떻게해야할까요?

미리 감사드립니다.

WRAP-UP (덕분에 옳은 길을 저를 퍼 팅에 대 한 이안합니다) :

이 경우 빌더 :: XmlBase 번호의 method_missing에서, 소스 코드를 읽는 과소 평가하지 마십시오. 솔루션은 태그 내용 (g.name)의 문자열을 전달하지 않는 것입니다. 이것은 내가 필요로하는 코드입니다 :

xml.instruct! 
xml.gallery do 
    @albums.each do |g| 
    xml.album(:title => g.name) do 
     g.pictures.each do |p| 
     xml.img(:src => p.resource_file_name) 
     end 
    end 
    end 
end 

답변

4

빌더가 잘못된 XML을 생성하지 않기 때문에 다시보십시오.

이 XML 결과
xml.instruct! 
xml.gallery do 
    [1, 2, 3].each do |g| 
    xml.album g.to_s, :title => g.to_s, :fspath => "[PATH]" 
    [4, 5, 6].each do |p| 
     xml.img nil, :src => "#{p}.gif" 
    end 
    end 
end 

:

<?xml version="1.0" encoding="UTF-8"?> 
<gallery> 
    <album title="1" fspath="[PATH]">1</album> 
    <img src="4.gif"></img> 
    <img src="5.gif"></img> 
    <img src="6.gif"></img> 
    <album title="2" fspath="[PATH]">2</album> 
    <img src="4.gif"></img> 
    <img src="5.gif"></img> 
    <img src="6.gif"></img> 
    <album title="3" fspath="[PATH]">3</album> 
    <img src="4.gif"></img> 
    <img src="5.gif"></img> 
    <img src="6.gif"></img> 
</gallery> 

당신은 아마 원하는

몇 가지를 스텁 (갤러리와 간단한 배열로 사진을 교체) 한 후 기본적으로이 코드를 작성 앨범 태그 안에 img-tags를 넣지 만 자신의 중첩은 잘못되었습니다. 들여 쓰기 코드를 이해하고 도움이 될 것입니다. do ... end 중괄호 대신 블록을 사용하면 여러 줄의 블록을 사용할 때마다 구조가 도움이됩니다.

+0

도움 주셔서 감사합니다. 당신은 앨범 태그를 놓친 것이 맞습니다. 사실, 이미지를 중첩 시키길 원합니다. 갤러리 블록의 범위 내에서 g.pictures를 호출하기 때문에 내 방식의 오류를 발견 할 수 없습니다. 내 실수는 어리 석고 어리 석다는 것이 확실하므로 계속 연결해 보겠습니다 ... – TMB

+0

앨범 블록 안에 g.pictures를 호출하면 준비가 완료됩니다. 앨범의 이름을 태그 또는 속성으로 만들 수도 있습니다. – iain