【问题标题】:In Rails conventions, what is preferred: default: true or default: false?在 Rails 约定中,首选的是:默认值:true 还是默认值:false?
【发布时间】:2012-10-16 03:42:44
【问题描述】:

我想知道是否有任何约定偏好反对将默认布尔值设置为真或假。也许它超出了 ActiveRecord 的范围,更像是一个一般的数据库设计问题。

我有一个带有active? 属性的模型,默认情况下所有记录都处于活动状态。

使用:active, :boolean, default: true:inactive, :boolean, default: false 进行迁移更好吗?

【问题讨论】:

  • 创建时新记录应该是active吗?

标签: ruby-on-rails activerecord naming-conventions


【解决方案1】:

根据我的经验(Rails 或其他),布尔属性最容易理解,当它们用积极的措辞时。

如果您考虑一下您的示例,您实际上是在“活跃”和“不活跃”之间进行选择。选择“不活动”(实际上只是“不活动”)会使代码更难阅读,因为我必须在心理上否定“活动”这个词才能理解代码在做什么。

这似乎是一件小事,但我真的认为“主动”是更好的选择。


要了解我的意思,请使用您的两个不同迁移作为示例来了解可读性的差异:

# New records will be active by default.
:active, :boolean, default: true

# New records will be not "not active" by default.
:inactive, :boolean, default: false

这两个 cmets 中哪一个更容易阅读和理解?我发现第一个更清楚。

【讨论】:

    【解决方案2】:

    使用假而不是真。我更喜欢不为布尔值设置默认值,因为无论如何nil 在Ruby 中被解释为false

    1.8.7 :001 > if nil
    1.8.7 :002?>   0
    1.8.7 :003?>   end
     => nil 
    1.8.7 :004 > if false
    1.8.7 :005?>   0
    1.8.7 :006?>   end
     => nil 
    1.8.7 :007 > if true
    1.8.7 :008?>   0
    1.8.7 :009?>   end
     => 0 
    

    但我认为该决定还取决于您希望该属性做什么。我认为在罕见的情况下,将 true 作为默认值可能更有意义。

    【讨论】:

    • Nil 值很棘手 - foo.active?会以虚假的方式表现,但 Foo.where(:active => false) 不会返回 active==nil 的行。
    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 2017-05-17
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    相关资源
    最近更新 更多