Метод подсчета для неопределенного массива активных записей @ objects.count - PullRequest
1 голос
/ 09 июля 2011

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

Если объект nil, то вернуть, ничего не найдено

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Есть много способов написать что-то вроде этого.

Что-то простое будет:

<% if @objects %>
  <%= @objects.count %>
<% else %>
  nothing found
<% end %>

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

<%= count_for(@object) %>
0 голосов
/ 04 августа 2015

Вот хорошее решение для вас:

<%= "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' ) %>

Извините, я знаю, что уже довольно поздно, но, надеюсь, полезно для кого-то еще!

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