2013-10-06 80 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的最佳答案。清晰简洁。 –

相关问题