web-dev-qa-db-ja.com

属性が存在し、設定されているかどうかを確認する最良の方法は何ですか?

2つの異なるモデルをリストする共通ビューがあります。唯一の違いは、link_toアクション、モデルの1つにはlink属性があり、もう1つにはありません。 link属性が存在するかどうかを確認し、存在する場合は設定されているかどうかを確認します。動作する次のものがありますが、もっと良い方法があるかどうか疑問に思っていました。

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

presence を使用できます。

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

または、@elementにはlinkがまったくない場合があります。 try を使用できます。

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

私はあなたができることを信じる@element.attribute?(例:@element.link?)(「魔法の属性」と呼ぶことができると思います。)

これはチェックします

  • モデルに存在する属性
  • 値がnilではない

まさにあなたが欲しいもの。

13
ahnbizcad

属性ハッシュを使用してみてください。このハッシュは、すべてのactiverecordオブジェクトの属性のkey => valueマッピングを返します。

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