Ruby on rails SQLite中的字段如何设置为非空?

Ruby on rails SQLite中的字段如何设置为非空?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个名为posts的表,我希望一些字段不为null。因此,每当没有数据时,我都要生成一个msg。如何将字段设置为非null?创建表时,只需在列的数据类型后添加“notnull”,例如“text not null”。如果您试图为该列添加一个空值的记录,这将导致引发异常。您可以在rails应用程序中添加catch/rescue来捕获此异常 但是,更好的方法可能是在您尝试使用ActiveRecord回调插入数据库之前验证数据…创建新迁移以更改表: change_column :table_name

我有一个名为
posts
的表,我希望一些字段
不为null
。因此,每当没有数据时,我都要生成一个msg。如何将字段设置为
非null

创建表时,只需在列的数据类型后添加“notnull”,例如“text not null”。如果您试图为该列添加一个空值的记录,这将导致引发异常。您可以在rails应用程序中添加catch/rescue来捕获此异常


但是,更好的方法可能是在您尝试使用ActiveRecord回调插入数据库之前验证数据…

创建新迁移以更改表:

change_column :table_name, :field_name, :null => false

那么您的表和字段已经存在,您想更改它吗?您可能需要删除并重新创建表。如果表中有数据,可以将其导出,然后->
Drop->Re create->Import
ok。我使用“rails生成脚手架帖子名称:字符串标题:字符串内容:文本”。我希望名称不为空,那么如何指定它。啊!我不确定,我不是rails人[但愿我是!:(].SQLite的
ALTER TABLE
支持非常有限;您必须构建一个新表。如果现有表中已经有相关字段为非空的数据,请将数据复制到临时表,删除旧表,创建新表,然后复制数据返回。哦,为了安全起见,在单个事务中执行。好的。但是我已经创建了一个表,那么是否可以对该表进行更改而不是新创建它?您可以编写迁移来删除单个列,然后使用不同的约束/默认值/等重新添加它。我不确定是否有ruby方法来更改单个列不需要删除它,但可以通过以下方式使用原始sql:执行“ALTER TABLE
posts
ALTER COLUMN
my_field
notnull”我自己没有试过,但应该可以。不客气。rb512也在下面回答了您关于更改列的问题。我不知道存在更改列。谢谢!