就像戴夫说的,你在某种程度上走错了路。
ActiveRecord 为数据库中的每个现有列创建方法,例如,如果表中有与模型对应的 foobar 列,那么您就有一个foobar
方法和一个foobar=(value)
方法。
如果您刚开始使用新的 Rails 应用程序,您可以并且应该通过迁移创建模式,您可以使用 Rails 中内置的迁移生成器,然后根据需要调整迁移文件并运行rake db:migrate
.
如果您在 Rails 之外对数据库进行更改,那么大部分情况下您已经可以通过 ActiveRecord 访问它。
如果这样做rake db:schema:dump
,您应该已经能够看到数据库中的列。
如果您想确保拥有架构的备份(包括不属于现有迁移的 SQL),请考虑config.active_record.schema_format = :sql
使用config/application.rb
. 然后,当您执行此操作时db/schema.rb
,您将拥有一个db/structure.sql
转储到该文件中的架构创建 SQL ,而不是拥有rake db:schema:dump
。
根据您在 Dave 的回答中的评论,您还希望设置一个必需的属性。您可以通过更改列以使其不可为空的迁移来执行此操作。您还可以向模型添加验证以要求它。如果您正在学习并且不必使用它们,请不要使用attr_protected
and attr_accessible
。批量分配安全性在 Rails 4 中消失了,您会因为认为它们与所需的内容有关而感到困惑(无论如何您都会使用强参数 - 请参阅我对上面问题的评论)。必填字段通常应首先由数据库限制(可空或不可空以及可能的约束/触发器)处理,然后通过验证在服务器端通过 ActiveRecord 验证,然后在客户端在 HTML/Javascript 中处理。