Ruby on rails 如何根据列表的内容在列表前打印标题?

Ruby on rails 如何根据列表的内容在列表前打印标题?,ruby-on-rails,ruby,Ruby On Rails,Ruby,假设我有一个数组的块,对于每个值,我要么打印,要么不打印基于某些条件的内容 <% @friends.each do |friend| %> <% if friend.status.best = true %> <%= friend.name %> <% end %> <% end %> 但如果最后没有打印任何值,我根本不想要任何标题 以下是我尝试过的: 如果我在块条件中设置某个变量@v <% if frie

假设我有一个数组的块,对于每个值,我要么打印,要么不打印基于某些条件的内容

<% @friends.each do |friend| %>
  <% if friend.status.best = true %>
    <%= friend.name %>
  <% end %>
<% end %>
但如果最后没有打印任何值,我根本不想要任何标题


以下是我尝试过的:

如果我在块条件中设置某个变量
@v

  <% if friend.status.best = true %>
    <%= friend.name %>
    <% @v = true %>
  <% end %>

然后我可以使用
if@v
条件打印标题,但问题是标题应该在块之前打印

我突然想到使用
if@v
条件来用javascript填充标题,但有时这不是即时的,我希望标题立即出现

有人有什么建议吗?

试试这个:

<% skip_header = false

@friends.each do |friend|
  if friend.status.best == true
    unless skip_header
      concat 'BEST FRIENDS'
      skip_header = true
    end
    concat friend.name
  end
end %>

试试这个:

<% skip_header = false

@friends.each do |friend|
  if friend.status.best == true
    unless skip_header
      concat 'BEST FRIENDS'
      skip_header = true
    end
    concat friend.name
  end
end %>

您可以使用快速确定是否至少有一个最好的朋友

<% if @friends.any? { |friend| friend.status.best } %>
  # The header
<% end %>
或者干脆

<% if friend.status.best %>
  <%= friend.name %>
<% end %>

回到最初的问题,
#any?
的方法在项目数量很大的情况下效率有点低,因为需要循环收集两次。此外,当您真正想要(至少是从您发布的片段中)显示最好的朋友时,您正在迭代整个
@friends
集合

您可能希望更改查询,以便
@friends
只包含最好的朋友(那些
best
true
的记录)。这样,您只需检查集合中是否存在值。

您可以使用快速确定是否至少有一个最好的朋友

<% if @friends.any? { |friend| friend.status.best } %>
  # The header
<% end %>
或者干脆

<% if friend.status.best %>
  <%= friend.name %>
<% end %>

回到最初的问题,
#any?
的方法在项目数量很大的情况下效率有点低,因为需要循环收集两次。此外,当您真正想要(至少是从您发布的片段中)显示最好的朋友时,您正在迭代整个
@friends
集合


您可能希望更改查询,以便
@friends
只包含最好的朋友(那些
best
true
的记录)。这样,您只需检查集合中是否存在值。

在if条件中,您是检查
true
还是分配
true
?检查
==
是必需的,或者如果friend.status.best@GaganGami,您可以简单地使用
。更正。我实际上是从OP复制了代码。这不是一个好主意。您在视图中有赋值,使用concat(这完全不是必需的,除非您希望将块中的数据作为方法的返回值返回)而且代码似乎不适合视图,因为它包含大量的业务逻辑/分配。@SimoneCarletti
concat
的别名,如果您在检查
true
或分配
true
?检查
==
是必需的,或者如果friend.status.best
@GaganGami,您可以简单地使用
。更正。我实际上是从OP复制了代码。这不是一个好主意。您在视图中有赋值,使用concat(这完全不是必需的,除非您希望将块中的数据作为方法的返回值返回)而且代码似乎不适合视图,因为它包含大量的业务逻辑/分配。@SimoneCarletti
concat
的别名,首先,如果
条件不合适,则它是
的别名。如果friend.status.best==true,则将其更改为
,如果friend.status.best,则只需使用
if friend.status.best
首先,如果
条件不正确,则使用
。将其更改为
if friend.status.best==true
或只需使用
if friend.status.best