2013-10-06 6 views
24

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

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

ответ

26

Вы можете использовать presence:

= link_to @element.title, (@element.link.presence || @element) 

Или, если @element не может иметь link вообще, вы могли бы использовать try:

= link_to @element.title, (@element.try(:link) || @element) 
5

Попробуйте использовать атрибуты хэш. Этот хеш вернет отображение key => value всех атрибутов объекта activerecord.

if @element.attributes['link'] 
    # Here we are 
else 
    # default 
end 
+6

еще лучше: '@ element.attributes.key? ('Link')' – rickyrickyrice

12

Я считаю, что вы можете просто сделать @element.attribute? (например @element.link?) (я полагаю, мы могли бы назвать это «магическими атрибутами».)

Это проверка на

  • устанавливается атрибут, существующие на модели
  • значение не является нулевым

именно то, что вы хотите.

+1

Это, безусловно, лучший ответ IMO. Ясный и лаконичный. –

Смежные вопросы