我想知道是否存在任何将默认布尔值设置为true或false的约定优先级。也许它超出了ActiveRecord的范围,更像是一个常见的数据库设计问题。
我有一个active?
属性的模型,默认情况下所有记录都是活动的。
使用:active, :boolean, default: true
或:inactive, :boolean, default: false
进行迁移是否更好?
答案 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
但我认为这个决定还取决于你希望属性做什么。我认为,在罕见的关注中,默认情况下可能更有意义。