嵌套枚举是不好的做法吗?
Are nested enumerables bad practice?
在我看来,我生成了许多餐厅菜单,这些菜单分为菜单类别,这些类别中有菜肴。现在我的模板设置如下:
<% @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 %>
我想知道在以这种方式嵌套多个可枚举项时,最佳做法是什么?除了将此代码插入部分代码之外,是否有更好的方法来完成此操作而不会使视图混乱。就这样可以吗?谢谢
显然,您的模型设置方式 (Menu
has_many categories
, Category
has_many dishes
等),如果您要在同一个视图中显示所有这些信息,您别无选择,只能遍历它们并在您的视图中显示所需的数据观点很好,恕我直言。我认为这没有任何问题。
只是一个提示,在循环关联模型的数据时,您只需要注意关联模型属性的数据始终存在,否则其中一些可能会出现 undefined method 'method_name' for nil:NilClass
错误.为避免该问题,您还可以使用 try。例如
menu.try(:name)
category.try(:name)
dish.try(:name)
等等
这样,如果某些或任何一个关联模型没有数据(即 nil
),您的视图将不会爆炸。
在我看来,我生成了许多餐厅菜单,这些菜单分为菜单类别,这些类别中有菜肴。现在我的模板设置如下:
<% @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 %>
我想知道在以这种方式嵌套多个可枚举项时,最佳做法是什么?除了将此代码插入部分代码之外,是否有更好的方法来完成此操作而不会使视图混乱。就这样可以吗?谢谢
显然,您的模型设置方式 (Menu
has_many categories
, Category
has_many dishes
等),如果您要在同一个视图中显示所有这些信息,您别无选择,只能遍历它们并在您的视图中显示所需的数据观点很好,恕我直言。我认为这没有任何问题。
只是一个提示,在循环关联模型的数据时,您只需要注意关联模型属性的数据始终存在,否则其中一些可能会出现 undefined method 'method_name' for nil:NilClass
错误.为避免该问题,您还可以使用 try。例如
menu.try(:name)
category.try(:name)
dish.try(:name)
等等
这样,如果某些或任何一个关联模型没有数据(即 nil
),您的视图将不会爆炸。