【发布时间】: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