【问题标题】:What is the best way to check if an attribute exists and is set?检查属性是否存在并设置的最佳方法是什么?
【发布时间】:2013-10-13 06:38:42
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby haml


    【解决方案1】:

    你可以使用presence:

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

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

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

    【讨论】:

      【解决方案2】:

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

      这会检查

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

      正是你想要的。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 更好:@element.attributes.key?('link')
        【解决方案4】:
        %li
          = link_to @element.title, @element[:link] || @element
        

        【讨论】:

        • 虽然此代码 sn-p 可能会解决问题,但including an explanation 将帮助人们了解您的代码建议的原因。
        • @Gerhard 在我看来,这是问题中代码的最短/最漂亮的版本。它不包含一个额外的代码符号。
        猜你喜欢
        • 2012-04-02
        • 1970-01-01
        • 2011-05-25
        • 2012-08-29
        • 2011-03-20
        • 2011-12-25
        • 1970-01-01
        • 2010-09-18
        相关资源
        最近更新 更多