ROR + Ошибка nil.empty? во время выполнения кода - PullRequest
3 голосов
/ 10 марта 2011

Моя таблица "Project" имеет счет-фактуру в виде целочисленного атрибута. Здесь я помещаю объект nil в этот атрибут в БД. Во время оценки nil.empty? происходит. Код, написанный на расширениях HAML

- @project.each do |proj|
  =proj.invoice if !proj.invoice.blank? || !proj.invoice.empty? || !proj.invoice.nil?
  - @project_invoice=proj.invoice

  =@project_invoice=0 if proj.invoice.blank? || proj.invoice.empty? || proj.invoice.nil

Я получаю эту ошибку при выполнении кода.

NoMethodError: У вас есть нулевой объект, когда вы этого не ожидали! Возможно, вы ожидали экземпляр Array. Произошла ошибка при оценке nil.empty?

Ответы [ 4 ]

4 голосов
/ 10 марта 2011

Существует несколько стандартных тестов, предоставляемых Ruby и rails, которые могут помочь, но обычно вам не нужно использовать их все сразу:

# Rails provided Object#blank? method
nil.blank? # => true
false.blank? # => true
''.blank? # => true
[ ].blank? # => true

# Ruby provided Object#nil? method
nil.nil? # => true
false.nil? # => false
''.nil? # => false
[ ].nil # => false

# Ruby class-specific #empty? method
nil.empty? # => error
false.empty? # => error
''.empty? # => true
[ ].empty? # => true

В вашем случае тест, который вы, вероятно, ищете, на самом деле совсем другой. Противоположностью blank? является present?, и она очень удобна для подобных ситуаций. Вы даже можете свернуть оба ваших инвертированных логических теста в простой троичный запрос:

- @project_invoice = proj.present? ? proj.invoice : 0

Более подробно это выглядит так:

* * 1010

Настоящий метод проверяет, что переменная представляет не ноль, непустое значение некоторого вида.

0 голосов
/ 10 марта 2011

если столбец накладной равен нулю, тогда! Proj.invoice.blank? оценивается как ложное, и следующий тест выполнен,! projt.invoice.empty?

, так как счет-фактура равен нулю, у вас есть nil.empty? какая ошибка, как пустая? не может работать на нуле.

ruby-1.9.2-p0 > !nil.blank? || !nil.empty?
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.empty?

Я думаю, что вы делаете излишнее, поскольку целое число не должно быть массивом. Я думаю, что вы должны просто сократить его, чтобы проверить только blank?, так как он также перехватывает пустой массив.

0 голосов
/ 10 марта 2011

Это код, который вы используете.Если это тот же код, я вижу орфографическую ошибку во второй строке.

Можете ли вы попробовать с

=proj.invoice if !proj.invoice.blank? || !proj.invoice.empty? || !proj.invoice.nil?
0 голосов
/ 10 марта 2011

Второе условие имеет имя переменной с ошибкой.Это должно быть proj , а не projt .

Это может привести к вашей проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...