Каков наилучший способ проверить, существует ли атрибут?
У меня есть общее представление, в котором перечислены две разные модели. Единственное отличие состоит в том, что при настройке действия link_to
одна из моделей имеет атрибут link
, а другой - нет. Я хочу проверить, существует ли атрибут link
, и если да, проверьте, установлен ли он. У меня есть следующее, что работает, но мне было интересно, есть ли лучший способ.
%li
- if @element.has_attribute?("link") && @element.link
= link_to @element.title, @element.link
- else
= link_to @element.title, @element
Ответы
Ответ 1
Вы можете использовать presence
:
= link_to @element.title, (@element.link.presence || @element)
Или, если @element
может вообще не иметь link
, вы можете использовать try
:
= link_to @element.title, (@element.try(:link) || @element)
Ответ 2
Я считаю, что вы можете просто сделать @element.attribute?
(например, @element.link?
)
(Я полагаю, мы могли бы назвать это "магическими атрибутами".)
Это проверяет наличие
- атрибут, существующий на модели
- значение не равно nil
Именно то, что вы хотите.
Ответ 3
Попробуйте использовать хэш атрибутов. Этот хеш вернет отображение key => value
всех атрибутов объекта activerecord.
if @element.attributes['link']
# Here we are
else
# default
end