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