Я хотел бы отобразить строку текста, только если объект, названный @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?
метод в направляющих заставляет ту же ошибку быть возвращенной.
Какие-либо идеи?
Как насчет:
<% if !@foo.nil? && !@foo.new_record? %>
Hello!
<% end %>
Во-первых, вам нужно использовать логику И, а не логику ИЛИ, поскольку любой объект ActiveRecord соответствует хотя бы одному требованию «не ноль» или «не новая запись».
Во-вторых, первая проверка на nil гарантирует, что вторая проверка не будет запущена, если первая не удалась. Ошибка возникает из-за того, что вы не можете использовать #new_record?
для объекта, который его не поддерживает, поэтому проверка на nil сначала гарантирует, что этот метод никогда не будет запущен на nil.
Вы можете загрузить курсоры в PyGame с помощью pygame.cursors.load _ xbm - это черно-белые курсоры только, конечно, хорошо документированное ограничение PyGame, согласно его документам (и я цитирую):
Pygame поддерживает только черно-белый курсоры для системы.
Для получения информации о документах формата XBM см., например, здесь . Такие файлы можно подготовить, например, с помощью библиотеки PIL в соответствии с ее документами .
-121--2818428-Это не вредно для опытных. Может быть вредным для начинающего или более свежего отладочного чужого кода.
-121--1577287- Я бы проверил по , если @ foo & & @ foo.id
. При этом проверяется наличие объекта @ foo activerecord и поле id
не является пустым. Если поле id
пустое, это означает, что это еще не запись в базе данных. Предполагается, что в таблице используется поле id
.
Простой способ -
<% if !@foo.try(:new_record) %>
Hello!
<% end %>
Они также могут вас заинтересовать:
<%= @foo.text if @foo.present? %>
или
<%= @foo.text unless @foo.blank? %>
Я предпочитаю использовать andand gem для этих проверок.
if @foo.andand.id
"Hello!"
end
Вызов .id будет выполняться только для объектов, отличных от nil.
Есть ли причина, по которой этот объект может быть нулевым, когда попадает в представление? Иногда добавление такой условной логики в представление может быть признаком того, что что-то можно отредактировать, и вы просто маскируете более серьезную проблему.
Позвольте мне дать еще один ответ, просто для удовольствия.
unless @foo.nil? or @foo.new_record?
"Hello"
end