Подтвердить что ты не робот

Каков наилучший способ проверить, существует ли атрибут?

У меня есть общее представление, в котором перечислены две разные модели. Единственное отличие состоит в том, что при настройке действия link_to одна из моделей имеет атрибут link, а другой - нет. Я хочу проверить, существует ли атрибут link, и если да, проверьте, установлен ли он. У меня есть следующее, что работает, но мне было интересно, есть ли лучший способ.

%li
  - if @element.has_attribute?("link") && @element.link
    = link_to @element.title, @element.link
  - else
    = link_to @element.title, @element
4b9b3361

Ответ 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