13

我怎样才能做到这一点?

<% for agent in @broker.agents %>
  ...
  <% if agent.cell %><span class="cell-number">Cell: <%= agent.cell %></span><% end %>
  ...
<% end %>

我想测试一下代理是否有一个单元格号码,如果有,显示条件里面的内容。我目前所拥有的似乎不起作用;它只显示“单元格:”。

想法?

4

6 回答 6

14

这是你要求的:

<% for agent in @broker.agents %>
  <% unless agent.cell.blank? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
<% end %>

细胞?无论单元格是 nil 还是空字符串,该方法都有效。Rails 为所有 ActiveRecord 属性添加了类似的功能。这看起来会更好一些:

<% for agent in @broker.agents %>
  <span class="cell-number">
    Cell: <%= agent.cell? ? "none given" : agent.cell %>
  </span>
<% end %>

问号和冒号形成一个快速的“if ? then : else”语句。上面的代码中有两个问号,因为一个是方法名称单元格的一部分?另一个是 if/then/else 结构的一部分。

于 2008-11-19T18:23:40.437 回答
13

我对这个问题“如何检查列是否有值? ”给出了非常详细的答案。

首先,重要的是要注意一个属性可以有四种值。

  1. nil值,即“nil”存储在数据库中
  2. 空值,即 "" 一个没有空格的空字符串
  3. 带有空格“”的字符串。
  4. 数据库中存在的值,即非空字符串

这是可以在这种情况下使用的所有当前方法(Ruby 2.2.2)的详细行为。

第一种方法: .empty?

  1. 对于nil值 => 抛出异常

    2.2.2 :037 > object.attribute
    => nil
    2.2.2 :025 > object.attribute.empty?
    NoMethodError: undefined method `empty?' for nil:NilClass
    
  2. 对于空值,即 "" 一个没有空格的空字符串

    2.2.2 :037 > object.attribute
    => ""
    2.2.2 :025 > object.attribute.empty?
    true
    
  3. 带有空格“”的字符串。

    2.2.2 :041 > object.attribute
    => " " 
    2.2.2 :042 > object.attribute.empty?
    => false
    
  4. 数据库中存在的值,即非空字符串

    2.2.2 :045 > object.attribute
     => "some value" 
    2.2.2 :046 > object.attribute.empty?
     => false 
    

第二种方法: .nil?

  1. nil值,即“nil”存储在数据库中

    2.2.2 :049 > object.attribute
     => nil 
    2.2.2 :050 > object.attribute.nil?
     => true
    
  2. 空值,即 "" 一个没有空格的空字符串

    2.2.2 :053 > object.attribute
     => "" 
    2.2.2 :054 > object.attribute.nil?
     => false 
    
  3. 带有空格“”的字符串。

    2.2.2 :057 > object.attribute
     => " " 
    2.2.2 :058 > object.attribute.nil?
     => false 
    
  4. 数据库中存在的值,即非空字符串

    2.2.2 :061 > object.attribute
     => "some value" 
    2.2.2 :062 > object.attribute.nil?
     => false
    

第三种方法: .blank?

  1. nil值,即“nil”存储在数据库中

    2.2.2 :065 > object.attribute
     => nil 
    2.2.2 :066 > object.attribute.blank?
     => true
    
  2. 空值,即 "" 一个没有空格的空字符串

    2.2.2 :069 > object.attribute
     => "" 
    2.2.2 :070 > object.attribute.blank?
     => true 
    
  3. 带有空格“”的字符串。

    2.2.2 :073 > object.attribute
     => " " 
    2.2.2 :074 > object.attribute.blank?
     => true 
    
  4. 数据库中存在的值,即非空字符串

    2.2.2 :075 > object.attribute
     => "some value" 
    2.2.2 :076 > object.attribute.blank?
     => false 
    

第四种方法: .present?

  1. nil值,即“nil”存储在数据库中

    2.2.2 :088 > object.attribute
     => nil 
    2.2.2 :089 > object.attribute.present?
     => false
    
  2. 空值,即 "" 一个没有空格的空字符串

    2.2.2 :092 > object.attribute
     => "" 
    2.2.2 :093 > object.attribute.present?
     => false
    
  3. 带有空格“”的字符串。

    2.2.2 :096 > object.attribute
     => " " 
    2.2.2 :097 > object.attribute.present?
     => false 
    
  4. 数据库中存在的值,即非空字符串

    2.2.2 :100 > object.attribute
     => "some value" 
    2.2.2 :101 > object.attribute.present?
     => true 
    

您可以根据您面临的情况使用这四种中的任何一种。

谢谢

于 2016-08-29T17:42:27.767 回答
5
if !agent.cell.blank?

有用。

于 2008-11-19T18:11:33.720 回答
1

代理.细胞?似乎与agent.cell.blank一样工作?在 RoR。

于 2008-11-20T12:33:53.853 回答
0
<% @broker.agents.each do |agent| %>
  ...
  <% unless agent.cell.empty? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
  ...
<% end %>

我发现使用#each,unlesscell.empty?乍一看更易读和更容易理解。

于 2008-11-20T23:40:15.570 回答
0

您实际上可以检查列是否不包含任何内容, Model.column == ""如果列类型为字符串,则将返回 true

于 2020-01-03T11:18:20.977 回答