在"每个...做"中的条件声明在Ruby?

时间:2012-06-15 23:51:38

标签: ruby sinatra

在我的erb文件中,我在body标签中有以下代码:

<% @tasks.each do |task| %>  
  <%= task.name %>
<% end %>

这是有效的,但如果task.otherAttribute不等于-1,我只想显示task.name。

出于某种原因,我无法弄清楚如何做到这一点!任何提示都会非常感激。

提前谢谢。

3 个答案:

答案 0 :(得分:3)

试试这个:

<% @tasks.each do |task| %>  
  <%= task.name if task.otherAttribute != 1 %>
<% end %>

或者:

<% @tasks.each do |task| %>  
  <%= task.name unless task.otherAttribute == 1 %>
<% end %>

我将提供更多选项以供将来参考:

<% @tasks.each do |task| %>
  <% if task.otherAttribute != 1 %>
    <%= task.name %>
  <% end %>
<% end %>

<% @tasks.each do |task| %>  
  <%= task.otherAttribute == 1 ? '' : task.name %>
<% end %>
祝你好运!

答案 1 :(得分:3)

我倾向于使用#select#reject这个习惯用法,因为那基本上就是你正在做的事情。

<%= @tasks.reject{|t| t.other_attribute == -1}.each do |task| %>
  <%= task.name %>
<% end %>

这些来自Enumerable模块,其中包含#each方法的大多数内容都包含在内。

答案 2 :(得分:0)

您可以将条件纳入您的ERB代码。

<%= task.name if task.otherAttribute != 1 %>

您还可以使用更详细的语法执行更复杂的任务。在你的情况下没有必要,但你也可以做更传统的if / else块,如下所示:

<% if task.otherAttribute != 1 %>
  <%= task.name %>
<% end %>