【问题标题】:Rails booleans - True and False vs 1 and 0Rails 布尔值 - True 和 False 与 1 和 0
【发布时间】:2012-09-12 01:29:58
【问题描述】:

我最近在我正在处理的项目中的 Comment 模型中添加了一个新的“提交”属性。在迁移中,我创建了这样的列:add_column :comments, :submitted, :boolean注意:我使用 MySQL 作为数据库。

我希望这个属性有一个默认值false,所以我添加了一个before_create 方法:

before_create :default_values

def default_values
  self.submitted = false
end

这对我来说似乎是正确的,但每当我尝试添加新评论时,什么都不会发生,并且控制台会显示错误。我的创建方法是通过 AJAX 完成的,控制器通过 JS 正确处理了该方法,但由于某种原因它默认为 format html 并试图重定向到不同的页面。

玩了一会儿后,我将default_values 方法更改为如下所示:

def default_values
  self.submitted = 0
end

之后一切正常。这是否与 Rails 使用 tinyint 作为数据库中的布尔字段有关?我原以为它足够聪明,可以在 false/true 和 1/0 之间进行转换。

有趣的是,我尝试通过控制台创建新评论,并且能够将我的 submitted 属性设置为 false 没有任何问题。为什么我必须使用整数而不是真/假值?

【问题讨论】:

  • 控制台的错误是什么?您可以在迁移中的字段上添加默认值(如下)。请注意,您对其进行编码的方式,如果创建对象时将提交设置为 true 或 false,则在创建时将其更改为 false。我需要查看错误才能知道为什么“= false”不起作用,因为它认为它应该有。
  • Marlin,我不太关心您提出的情况,因为当创建此模型的实例时,submitted 应始终默认设置为 false。最初在迁移中这样做是个好主意,但我很好奇为什么 Rails 不允许我使用false。我收到的错误看起来好像控制器跳过了 format.js 渲染并直接进入 HTML,这不小心导致了 404。

标签: mysql ruby-on-rails boolean


【解决方案1】:

布尔值很聪明,只需使用:

object.submitted?

作为访问方法...

【讨论】:

    【解决方案2】:

    为您的迁移添加默认值:

    add_column :comments, :submitted, :boolean, :default => false
    

    【讨论】:

    • 那肯定行得通,但我想我更感兴趣的是为什么 Rails 不允许我在 before_create 方法中使用 false
    • 我会接受这个作为答案,因为这可能是我一开始就应该做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2013-10-17
    • 1970-01-01
    • 2023-03-02
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多