在我看来,我正在生成许多餐厅菜单,这些菜单分为菜单类别,其中这些类别是菜肴。现在我的模板设置如下:
<% @menus.each do |menu| %>
<h2><%= menu.name %></h2>
...
<% menu.categories.each do |category| %>
<h3><%= category.name %></h3>
...
<% category.dishes.each do |dish| %>
<p><%= dish.name %></p>
...
<% end %>
<% end %>
<% end %>
我想知道在以这种方式嵌套多个枚举时最佳做法是什么?除了将此代码插入到局部之外,有没有更好的方法来实现这一点而不会使视图混乱。这样好吗?感谢。
答案 0 :(得分:0)
显然,您的模型设置方式(Menu
has_many categories
,Category
has_many dishes
等。),如果你要在同一个视图中显示所有这些信息,你没有别的办法,而只是循环遍历它们并在你的视图中显示所需的数据,这很好,恕我直言。我没有看到任何问题。
只需一个提示,在循环关联模型的数据时,您只需要注意始终为关联的模型属性提供数据,否则可能会出现undefined method 'method_name' for nil:NilClass
错误。为避免此问题,您还可以使用try。 e.g。
menu.try(:name)
category.try(:name)
dish.try(:name)
等
这样,如果某个或任何一个相关模型没有数据存在(即nil
),您的视图就不会爆炸。