作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我希望 .html.erb 中有一种简洁的方法,仅当变量不为 nil 时才循环遍历该变量。
我希望执行以下内容,但如果@family 为 nil 则不执行。
<% @family.children.each.with_index(1) do |family_member, index| %>
// HTML HERE
<% end %>
我尽量避免做这样的事情
<% if @family %>
<% @family.children.each.with_index(1) do |family_member, index| %>
// HTML HERE
<% end %>
<% end %>
尤其是尽量避免需要
<% if @family && @family.children %>
<% @family.children.each.with_index(1) do |family_member, index| %>
// HTML HERE
<% end %>
<% end %>
有更好的方法吗?
最佳答案
此解决方案可能会产生误导,但 Ruby 的语法允许您这样做:
<% @family.children.each.with_index(1) do |family_member, index| %>
// HTML HERE
<% end unless @family.blank? %>
# ^^^^^^^^^^^^^^^^^^^^^
我只将此解决方案用于简单的语句,例如测试对象的存在(如您的情况)。 我不建议将此解决方案用于更复杂的逻辑,因为第三方不会知道条件位于 block 的末尾。
另一个:
<% (@family.try(:children) || []).each.with_index(1) do |family_member, index| %>
# mu-is-too-short's (brilliant) suggestion:
<% @family.try(:children).to_a.each.with_index(1) do |family_member, index| %>
如果 @family
是 nil
,try(:children)
不会引发错误,但会返回 nil
,然后是 nil || []
返回“你可以在其上循环”的空数组(实际上在其上循环零次)。
关于ruby-on-rails - Ruby 遍历一个变量,除非它是 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078395/
我是一名优秀的程序员,十分优秀!