2012-05-01 7 views
2
私は、次のindex.html.erbファイルのJSON出力を構築するためにRABLを使用しようとしている

での作品:複数の子モデルとネストRABL - HTML

<% @halls.each do |hall| %> 
<%= hall.name.capitalize %><br><br> 
<% hall.days.each do |day| %> 
    <%= day.date.capitalize %> 
    <br><br>  
    <% day.meals.each do |meal| %> 
     <%= meal.name.capitalize %><br><br> 
     <% meal.foods.each do |food| %> 
      <%= food.name %> <br> 
     <% end %> 
    <br> 
    <% end %> 
<% end %> 
    <% end %> 

この時点では、私が試してみました何百万もの方法で、index.json.rablファイルのコード生成に誰かが助けてくれることを願っていました。あなたは子ノードの「深いネスト」を行いたい場合は

答えて

4

、これを試してみる:

collection @halls 

# Use a custom node to get capitalized name 
node :name do |hall| 
    hall.name.capitalize 
end 

# Child list of days 
child :days do 
    node :date do |day| 
    day.date.capitalize 
    end 

    child :meals do 
    node :name do |meal| 
     meal.name.capitalize 
    end 
    child :foods do 
     # No need to use custom node because we don't need to do extra processing on the value (i.e capitalization is not required) and 'name' is a simple attribute on the model. 
     attribute :name 
    end 
    end 
end 

をそうでない場合、あなたはすべての子が同じレベルですべてのノードたい場合は、その後、巣ませんdoブロック。

また、RailsCast on RABLをチェックしてください。どのようなオブジェクトが様々なRABLブロック(すなわち、子ブロック、ノードブロックなど)の「スコープ」にあるかということに長時間を要した最も大きなコンセプトの1つです.RailsCastは、オブジェクトのスコープを説明するためのまともな仕事をしています。

+1

アレックスあなたのために動作する場合は、この答えを除いてください。 – ezis

+0

does not work。ネストされたブロックを単純にスローします –