如果红宝石中没有满足条件,则不显示多个html块

时间:2013-05-10 02:42:35

标签: ruby-on-rails

如果数据不可用,我试图限制显示的信息。

在我的view.rb文件中,我有类似的东西

<% if @content != nil %>
 <div>
   <h3>....</h3>
    <% @content[0..3].each do |something| %>  
     <li> .... <li>
    <% end %>
    <% @content[4..5].each do |something| %>  
     <li> .... <li>
    <% end %>
    <% @content[5..11].each do |something| %>  
     <li> .... <li>
    <% end %>
 <div>
<% end %>

即使内容为零也是如此,像内容一样[4..5]。每个人都做|某事由于显而易见的原因正在运行并抛出错误。

如果不符合条件,如何让多个html和ruby代码块被忽略?

3 个答案:

答案 0 :(得分:1)

如果代码<% content[4..5].each do |something| %>被执行,那么 @content 不是零,那么ruby就没有办法出错。

但是,如果它类似于空数组或空字符串,那么它将通过测试。为了涵盖各种可能的“无类似”值(零,空,空白......),请使用:

<% unless @content.blank? %>

让我知道它是否有帮助。

答案 1 :(得分:0)

你可以使用:

 <% unless @content.nil? %>
      #true
 <%else%>
      #false
 <%end%>

答案 2 :(得分:0)

你确定@content肯定是零吗?请注意,对象可以为空,但不是零。

例如:

@content = []

@content = {}

将对@content!= nil保持为true,因为它实际上不是nil。如果之前从未实例化,则引用为nil。

如果您通过Modelname,All等数据库查询将数据存储到@content,那么您将获得一个空数组而不是null(nil)对象。

此外,如果您从用户接收@content作为请求参数,那么如果GET请求包含参数的名称但不包含任何值,则@content再次为空但不是nil。

http://yourdomain.com/somecontroller/index?name=10&age= 将params [:age]视为空的零。

解决方案:

<% if @content.to_s.empty? != true %>
<div>
<h3>....</h3>
<% content[0..3].each do |something| %>  
 <li> .... <li>
<% end %>
<% content[4..5].each do |something| %>  
 <li> .... <li>
<% end %>
<% content[5..11].each do |something| %>  
 <li> .... <li>
<% end %>
<div>
<% end %>