Вопрос

Как я могу это сделать?

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

Я хочу проверить, есть ли у агента номер ячейки, и если да, то отобразить то, что находится внутри условного выражения.То, что у меня есть сейчас, похоже, не работает;он просто отображает «Ячейка:".

Мысли?

Это было полезно?

Решение

Это то, что вы просили:

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

Клетка?метод работает независимо от того, равна ли ячейка нулю или пустой строке.Rails добавляет аналогичные функции для всех атрибутов ActiveRecord.Это будет выглядеть немного красивее:

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

Знак вопроса и двоеточие образуют быстрый «если?затем :заявление «еще».В приведенном выше коде есть два вопросительных знака, потому что один из них является частью ячейки имени метода?а другой является частью конструкции if/then/else.

Другие советы

Я даю очень подробный ответ на этот вопрос»Как проверить, имеет ли столбец значение?".

Прежде всего, важно отметить, что атрибут может иметь четыре типа значений.

  1. ноль значение, т.е. «ноль», хранящееся в базе данных
  2. пустой значение, т.е. "" пустая строка с нет пробелов
  3. пустой нить с пробелами " ".
  4. значение, присутствующее в базе данных, т.е. непустая строка.

Вот подробное поведение всех существующих методов (Ruby 2.2.2), которые можно использовать в этом случае.

Первый метод: .empty?

  1. Для ноль значение => Выдает исключение

    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. ноль значение, т.е. «ноль», хранящееся в базе данных

    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. ноль значение, т.е. «ноль», хранящееся в базе данных

    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. ноль значение, т.е. «ноль», хранящееся в базе данных

    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 
    

Вы можете использовать любой из четырех в зависимости от ситуации, с которой вы столкнулись.

Спасибо

if !agent.cell.blank?

Оно работает.

агент.ячейка?кажется, работает так же, как и Agent.cell.blank?в РоР.

<% @broker.agents.each do |agent| %>
  ...
  <% unless agent.cell.empty? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
  ...
<% end %>

Я нахожу применение #each, unless, и cell.empty? чтобы быть более читабельным и понятным с первого взгляда.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top