Как проверить, является ли объект нолем в представлении в Ruby?

Я хотел бы отобразить строку текста, только если объект, названный @foo, установлен. По моему мнению, я пробую что-то вроде этого:

<% if !@foo.new_record? || !@foo.nil? %>
    Foo is not a new record or nil
<% end %>

Но это перестало работать, возвращаясь You have a nil object when you didn't expect it! Я вполне уверен, это происходит из-за new_record? метод. Как я проверяю, не ли что-то новая запись или ноль, не вызывая ошибку? В PHP это было бы достигнуто путем выяснения if(!empty($foo)) но даже empty? метод в направляющих заставляет ту же ошибку быть возвращенной.

Какие-либо идеи?

12
задан Jonas Elfström 11 September 2013 в 10:03
поделиться

7 ответов

Как насчет:

<% if !@foo.nil? && !@foo.new_record? %>
  Hello!
<% end %>

Во-первых, вам нужно использовать логику И, а не логику ИЛИ, поскольку любой объект ActiveRecord соответствует хотя бы одному требованию «не ноль» или «не новая запись».

Во-вторых, первая проверка на nil гарантирует, что вторая проверка не будет запущена, если первая не удалась. Ошибка возникает из-за того, что вы не можете использовать #new_record? для объекта, который его не поддерживает, поэтому проверка на nil сначала гарантирует, что этот метод никогда не будет запущен на nil.

14
ответ дан 2 December 2019 в 07:02
поделиться

Вы можете загрузить курсоры в PyGame с помощью pygame.cursors.load _ xbm - это черно-белые курсоры только, конечно, хорошо документированное ограничение PyGame, согласно его документам (и я цитирую):

Pygame поддерживает только черно-белый курсоры для системы.

Для получения информации о документах формата XBM см., например, здесь . Такие файлы можно подготовить, например, с помощью библиотеки PIL в соответствии с ее документами .

-121--2818428-

Это не вредно для опытных. Может быть вредным для начинающего или более свежего отладочного чужого кода.

-121--1577287-

Я бы проверил по , если @ foo & & @ foo.id . При этом проверяется наличие объекта @ foo activerecord и поле id не является пустым. Если поле id пустое, это означает, что это еще не запись в базе данных. Предполагается, что в таблице используется поле id .

1
ответ дан 2 December 2019 в 07:02
поделиться

Простой способ -

<% if !@foo.try(:new_record) %>
  Hello!
<% end %>
1
ответ дан 2 December 2019 в 07:02
поделиться

Они также могут вас заинтересовать:

<%= @foo.text if @foo.present? %>

или

<%= @foo.text unless @foo.blank? %>
3
ответ дан 2 December 2019 в 07:02
поделиться

Я предпочитаю использовать andand gem для этих проверок.

if @foo.andand.id
  "Hello!"
end

Вызов .id будет выполняться только для объектов, отличных от nil.

0
ответ дан 2 December 2019 в 07:02
поделиться

Есть ли причина, по которой этот объект может быть нулевым, когда попадает в представление? Иногда добавление такой условной логики в представление может быть признаком того, что что-то можно отредактировать, и вы просто маскируете более серьезную проблему.

1
ответ дан 2 December 2019 в 07:02
поделиться

Позвольте мне дать еще один ответ, просто для удовольствия.

unless @foo.nil? or @foo.new_record?
  "Hello"
end
2
ответ дан 2 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: