检查属性是否存在并设置的最佳方法是什么?

Eri*_*oss 28 ruby haml ruby-on-rails

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

%li
  - if @element.has_attribute?("link") && @element.link
    = link_to @element.title, @element.link
  - else
    = link_to @element.title, @element
Run Code Online (Sandbox Code Playgroud)

ck3*_*k3g 31

你可以使用presence:

= link_to @element.title, (@element.link.presence || @element)
Run Code Online (Sandbox Code Playgroud)

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

= link_to @element.title, (@element.try(:link) || @element)
Run Code Online (Sandbox Code Playgroud)


ahn*_*cad 13

我相信你可以做@element.attribute?(例如@element.link?)(我想我们可以把它称为"魔法属性".)

这会检查

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

正是你想要的.


One*_*ude 8

尝试使用属性哈希.此哈希将返回key => value所有activerecord对象的属性的映射.

if @element.attributes['link']
  # Here we are
else
  # default
end
Run Code Online (Sandbox Code Playgroud)

  • 更好的是:`@ element.attributes.key?('link')` (7认同)