【问题标题】:Are nested enumerables bad practice?嵌套枚举是不好的做法吗?
【发布时间】:2015-10-26 00:17:12
【问题描述】:

在我看来,我正在生成许多餐厅菜单,这些菜单分为菜单类别,并且在这些类别中是菜肴。现在我的模板设置如下:

<% @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 %>

我想知道以这种方式嵌套多个可枚举对象的最佳做法是什么?除了将此代码插入部分代码之外,还有没有更好的方法来完成此操作而不会弄乱视图。照原样好吗?谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby model-view-controller view enumeration


    【解决方案1】:

    显然,您的模型设置方式(Menu has_many categoriesCategory has_many dishes 等),如果您要展示所有这些信息都在同一个视图中,您别无他法,只能遍历它们并在视图中显示所需的数据,这很好,恕我直言。我看不出有什么问题。

    只有一个提示,在循环遍历关联模型的数据时,您只需要注意始终存在关联模型属性的数据,否则您可能会收到 undefined method 'method_name' for nil:NilClass 错误。为避免该问题,您还可以使用try。例如

    menu.try(:name)
    category.try(:name)
    dish.try(:name)
    

    等等

    这样,如果某些或任何一个关联模型没有数据存在(即nil),您的视图将不会爆炸。

    【讨论】:

    • 谢谢。至于menu.try(:name),如果属性已经有验证,你还会建议使用它吗?
    • 验证肯定更好。使用try 不是一个好主意。如果您可以使用验证确保您的嵌套资源始终存在,那么这是最好的做法:)
    • 很高兴知道。再次感谢。
    猜你喜欢
    • 2019-03-25
    • 2019-02-12
    • 2014-04-30
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多