Rails: Как проверить, имеет ли значение столбца значение?
Как я могу это сделать?
<% for agent in @broker.agents %>
...
<% if agent.cell %><span class="cell-number">Cell: <%= agent.cell %></span><% end %>
...
<% end %>
Я хочу проверить, есть ли у агента номер ячейки, и если да, покажите, что внутри условного. В настоящее время я не работаю; он просто отображает "Ячейка:".
Мысли?
Ответы
Ответ 1
Это то, о чем вы просили:
<% 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". Есть два вопроса в коде выше, потому что один из них является частью ячейки имени метода? а другой является частью конструкции if/then/else.
Ответ 2
if !agent.cell.blank?
Он работает.
Ответ 3
Я даю очень подробный ответ на этот вопрос. Как проверить, имеет ли столбец значение? ".
Прежде всего, важно отметить, что атрибут может иметь в себе четыре вида значений.
- nil значение i.e "nil", хранящееся в базе данных
- пусто значение i.e "" пустая строка с без пробелов
- пустая строка с пробелами "".
- значение присутствует в базе данных. непустая строка.
Вот подробное поведение всех существующих методов (Ruby 2.2.2), которые могут быть использованы в этом случае.
Первый метод: .empty?
-
Для nil value = > Выдает исключение
2.2.2 :037 > object.attribute
=> nil
2.2.2 :025 > object.attribute.empty?
NoMethodError: undefined method `empty?' for nil:NilClass
-
В пустое значение i.e "" пустая строка с без пробелов
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?
-
nil значение i.e "nil", хранящееся в базе данных
2.2.2 :049 > object.attribute
=> nil
2.2.2 :050 > object.attribute.nil?
=> true
-
пусто значение i.e "" пустая строка с без пробелов
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?
-
nil значение i.e "nil", хранящееся в базе данных
2.2.2 :065 > object.attribute
=> nil
2.2.2 :066 > object.attribute.blank?
=> true
-
пусто значение i.e "" пустая строка с без пробелов
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?
-
nil значение i.e "nil", хранящееся в базе данных
2.2.2 :088 > object.attribute
=> nil
2.2.2 :089 > object.attribute.present?
=> false
-
пусто значение i.e "" пустая строка с без пробелов
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
Вы можете использовать любой из четырех в зависимости от ситуации, с которой вы сталкиваетесь.
Спасибо
Ответ 4
agent.cell? похоже, работает так же, как agent.cell.blank? в RoR.
Ответ 5
<% @broker.agents.each do |agent| %>
...
<% unless agent.cell.empty? %>
<span class="cell-number">Cell: <%= agent.cell %></span>
<% end %>
...
<% end %>
Я считаю использование #each, unless
и cell.empty?
более читабельным и более понятным с первого взгляда.