gpt4 book ai didi

ruby-on-rails - Ruby 遍历一个变量,除非它是 nil

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:20 27 4
gpt4 key购买 nike

我希望 .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| %>

如果 @familyniltry(:children) 不会引发错误,但会返回 nil,然后是 nil || [] 返回“你可以在其上循环”的空数组(实际上在其上循环零次)。

关于ruby-on-rails - Ruby 遍历一个变量,除非它是 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com