在Rails约定中,首选是什么:default:true或default:false?

时间:2012-10-15 19:18:31

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

我想知道是否存在任何将默认布尔值设置为true或false的约定优先级。也许它超出了ActiveRecord的范围,更像是一个常见的数据库设计问题。

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

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

2 个答案:

答案 0 :(得分:6)

根据我的经验(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

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

答案 1 :(得分:1)

使用false而不是true。我更喜欢,不设置布尔值的默认值,因为无论如何,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 

但我认为这个决定还取决于你希望属性做什么。我认为,在罕见的关注中,默认情况下可能更有意义。