0

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

在我的 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 %>

即使内容为零,像 content[4..5].each 这样的行也会做 |something| 由于明显的原因正在运行并抛出错误。

如果不满足条件,如何忽略多个 html 和 ruby​​ 代码块?

4

3 回答 3

1

如果代码<% content[4..5].each do |something| %>被执行,那么@content不是 nil,那么 ruby​​ 就不会出错。

但是,如果它是一个空数组或空字符串,那么它将通过测试。为了涵盖广泛的可能的“nil-like”值(nil、empty、blank...),请使用:

<% unless @content.blank? %>

让我知道它是否有帮助。

于 2013-05-10T02:49:20.743 回答
0

您可以使用:

 <% unless @content.nil? %>
      #true
 <%else%>
      #false
 <%end%>
于 2013-05-10T02:51:06.497 回答
0

你确定@content 肯定为零吗?请注意,一个对象可以是空的,而它不是 nil。

例如:

@内容=[]

或者

@内容={}

将适用于 @content!=nil,因为它实际上不是 nil。如果以前从未实例化过引用,则该引用为 nil。

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

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

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

解决方案:

<% 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 %>
于 2013-05-10T03:08:34.820 回答