rails else语句重复多次

时间:2016-02-20 16:01:40

标签: ruby-on-rails

所以我认为这是

<% @events.each do |event| %>
      <% if event.eventcomplete %>
  <% else %>
  <tr>
    <td colspan="7">
      <p>
        No Events could be found.
      </p>
    </td>
</tr>
  <% end %>

这是在我的搜索结果页面上,

然而,如果没有eventcomplete,我想要的只是显示一个没有找到事件,

目前我发现了大约100个事件,但是,这些事件都没有完成。所以我得到了大约100&#34;没有发现任何事件&#34;

感谢您的帮助

萨姆

4 个答案:

答案 0 :(得分:2)

我不知道你的代码是什么样的,但是我觉得你在视图中用eventcomplete过滤来确定要显示哪些行以及是否显示“没有结果“消息。大概你以后想要使用这个集合做其他事情(比如分页),所以我建议在控制器中过滤集合:

# controller code
@in_progress_events = @events.where(eventcomplete: false)

在收集视频到达视图之前对其进行了正确过滤后,请查看此答案中的要点以获取有关显示的提示:Rails: An elegant way to display a message when there are no elements in database

答案 1 :(得分:1)

您的代码缺少<% end %>代码。

<% @events.each do |event| %>
  <% if event.eventcomplete %>
     [insert view code to show if event.eventcomplete is true]
  <% else %> 
    <tr>
      <td colspan="7">
        <p>
          No Events could be found.
        </p>
      </td>
    </tr>
  <% end %>
<% end %>

答案 2 :(得分:0)

实际上代码正在做它应该做的事情,

你的html Block在你的每一个块中被定义,这就是为什么它被提升了100次。

我刚用Helper Variables修复它,但它只是一个解决方法

您应该在模型中使用更多静态方法,只需定义它

请确保您的商业逻辑在您的模型中占有一席之地:

胖模型,瘦控制器/视图

这应该有效

<% @there_is_no_eventcomplete = false %>
<% @events.each do |event| %>
   <% if event.eventcomplete %>
      @there_is_no_eventcomplete = true
   <% end %> 
<% end %> 
<% if @there_is_no_eventcomplete == false %>
  <tr>
    <td colspan="7">
      <p>
        No Events could be found.
      </p>
    </td>
  </tr>
<% end %>

答案 3 :(得分:0)

您希望在模型上使用范围,然后可以在控制器中调用该范围。我不确定您是如何设置模型或如何确定事件是否已完成,因此我们假设您在模型上完成了布尔属性:

event.rb

class Event
  def self.completed
    where(complete: false)
  end
end

控制器

@events = Event.completed

视图

<% unless @events.nil?
  <% @events.each do |event|%>
    // your code
  <% end %>
<% else %>
  // your code
<% end %>