Вот хорошее решение для вас:
<%= "nothing found" unless @objects.try(:length).to_i > 0 %>
Одна из проблем заключается в том, что вы не можете запустить count
для нулевого объекта. Поэтому вам нужно использовать супер удобный метод .try()
Rails, чтобы вернуть nil, когда @objects = nil
, а не NoMethodError
.
Следующая проблема: Вы не можете сравнить nil
и число, используя >
, поэтому вам нужно преобразовать результаты @objects.length
в целое число, которое вернет 0 для нуля.
Наконец, попробуйте позвонить length
, а не count
. Это позволит избежать выполнения каких-либо дополнительных запросов, когда определено @objects
.
Избегает: SELECT COUNT(*) FROM 'objects'
Также, если вы хотите отобразить счет с использованием этой однострочной техники, вы можете просто написать сокращение if / else следующим образом:
<%= @objects.try(:length).to_i > 0 ? @objects.length : "nothing found" %>
Последний вариант:
Используйте метод множественного числа, который может обрабатывать ноль:
Showing <%= pluralize( @objects.try(:length), 'object' ) %>
Извините, я знаю, что уже довольно поздно, но, надеюсь, полезно для кого-то еще!