2008-11-19 3 views
10

Как это сделать?Rails: Как проверить, имеет ли значение столбца значение?

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

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

Мысли?

ответ

13

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

<% 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.

4
if !agent.cell.blank? 

Это работает.

+2

Вы могли бы рассмотреть «если agent.cell.blank?», Который некоторые утверждают, является «более Руби-иш» – 2008-11-19 23:04:22

+0

я использую, если если agent.cell.blank потому что двойные негативы не являются удивительными. – FlySwat 2009-01-09 22:37:15

+2

Вы также можете использовать `if agent.cell.present?` #present? возвращает противоположность #blank? – paradoja 2013-08-29 11:44:46

1

agent.cell? похоже, работает так же, как agent.cell.blank? в RoR.

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

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

4

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

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

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

Ниже приведено подробное описание всех существующих методов (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. пустой Значение i.е "" пустая строка с без пробелов

    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 
    

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

Благодаря

Смежные вопросы