1

我最近在我正在处理的项目中的 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。为什么我必须使用整数而不是真/假值?

4

2 回答 2

4

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

object.submitted?

作为访问方法...

于 2012-09-19T18:34:07.877 回答
2

为您的迁移添加默认值:

add_column :comments, :submitted, :boolean, :default => false
于 2012-09-19T17:54:03.557 回答