32

我有一个共同的观点,列出了两个不同的模型。唯一的区别是在设置link_to动作时,其中一个模型有link属性,而另一个没有。我想检查该link属性是否存在,如果存在,请检查它是否已设置。我有以下工作,但我想知道是否有更好的方法。

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

4 回答 4

34

你可以使用presence

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

或者,如果@element可能根本没有link,您可以使用try

= link_to @element.title, (@element.try(:link) || @element)
于 2013-10-06T18:17:01.857 回答
13

我相信你可以做@element.attribute?(​​例如@element.link?)(我想我们可以称之为“魔法属性”。)

这检查

  • 模型上存在的属性
  • 值不为零

正是你想要的。

于 2014-11-16T08:38:57.240 回答
9

尝试使用属性哈希。此散列将返回key => value所有活动记录对象属性的映射。

if @element.attributes['link']
  # Here we are
else
  # default
end
于 2013-10-06T18:14:30.640 回答
0
%li
  = link_to @element.title, @element[:link] || @element
于 2021-10-16T15:41:44.127 回答