32

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
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?(eg @element.link?) (私はそれを「魔法の属性」と呼ぶことができると思います.)

これは、

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

まさにあなたが望むもの。

于 2014-11-16T08:38:57.240 に答える
9

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

if @element.attributes['link']
  # Here we are
else
  # default
end
于 2013-10-06T18:14:30.640 に答える