2010-12-10 10 views
2

画像アルバムのindex.xml.builderファイルに問題があります。私はそれが何かシンプルだと確信していますが、それはBuilder :: XmlMarkupのドキュメントで解決策を見つけていないと私を狂わせてしまいます。Rails 3 - XML Builder

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

関連する問題