我正在尝试使用RABL为以下index.html.erb文件构建JSON输出:
<% @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文件的代码,因为我已完全彻底陷入困境。
答案 0 :(得分: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块的“范围”中(即子块,节点块等).RailsCast在解释对象的范围方面做得不错。