Рельсы:Как проверить, имеет ли столбец значение?
-
08-07-2019 - |
Вопрос
Как я могу это сделать?
<% 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.
Другие советы
Я даю очень подробный ответ на этот вопрос»Как проверить, имеет ли столбец значение?".
Прежде всего, важно отметить, что атрибут может иметь четыре типа значений.
- ноль значение, т.е. «ноль», хранящееся в базе данных
- пустой значение, т.е. "" пустая строка с нет пробелов
- пустой нить с пробелами " ".
- значение, присутствующее в базе данных, т.е. непустая строка.
Вот подробное поведение всех существующих методов (Ruby 2.2.2), которые можно использовать в этом случае.
Первый метод: .empty?
Для ноль значение => Выдает исключение
2.2.2 :037 > object.attribute => nil 2.2.2 :025 > object.attribute.empty? NoMethodError: undefined method `empty?' for nil:NilClass
Для пустой значение, т.е. "" пустая строка с нет пробелов
2.2.2 :037 > object.attribute => "" 2.2.2 :025 > object.attribute.empty? true
пустой нить с пробелами " ".
2.2.2 :041 > object.attribute => " " 2.2.2 :042 > object.attribute.empty? => false
значение, присутствующее в базе данных, т.е. непустая строка.
2.2.2 :045 > object.attribute => "some value" 2.2.2 :046 > object.attribute.empty? => false
Второй метод: .nil?
ноль значение, т.е. «ноль», хранящееся в базе данных
2.2.2 :049 > object.attribute => nil 2.2.2 :050 > object.attribute.nil? => true
пустой значение, т.е. "" пустая строка с нет пробелов
2.2.2 :053 > object.attribute => "" 2.2.2 :054 > object.attribute.nil? => false
пустой нить с пробелами " ".
2.2.2 :057 > object.attribute => " " 2.2.2 :058 > object.attribute.nil? => false
значение, присутствующее в базе данных, т.е. непустая строка.
2.2.2 :061 > object.attribute => "some value" 2.2.2 :062 > object.attribute.nil? => false
Третий метод: .blank?
ноль значение, т.е. «ноль», хранящееся в базе данных
2.2.2 :065 > object.attribute => nil 2.2.2 :066 > object.attribute.blank? => true
пустой значение, т.е. "" пустая строка с нет пробелов
2.2.2 :069 > object.attribute => "" 2.2.2 :070 > object.attribute.blank? => true
пустой нить с пробелами " ".
2.2.2 :073 > object.attribute => " " 2.2.2 :074 > object.attribute.blank? => true
значение, присутствующее в базе данных, т.е. непустая строка.
2.2.2 :075 > object.attribute => "some value" 2.2.2 :076 > object.attribute.blank? => false
Четвертый метод: .present?
ноль значение, т.е. «ноль», хранящееся в базе данных
2.2.2 :088 > object.attribute => nil 2.2.2 :089 > object.attribute.present? => false
пустой значение, т.е. "" пустая строка с нет пробелов
2.2.2 :092 > object.attribute => "" 2.2.2 :093 > object.attribute.present? => false
пустой нить с пробелами " ".
2.2.2 :096 > object.attribute => " " 2.2.2 :097 > object.attribute.present? => false
значение, присутствующее в базе данных, т.е. непустая строка.
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?
чтобы быть более читабельным и понятным с первого взгляда.