2013-10-06 77 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的最佳答案。清晰簡潔。 –

相關問題