我在SQLite表中添加了一列,如下所示
add_column :administrators, :pin, :digest
现在我要删除它。我用了
remove_column :administrators, :pin, :digest
这给了我这个错误
undefined method `to_sym' for nil:NilClass
为什么它不起作用?
答案 0 :(得分:1)
我不相信:digest
是SQLite的有效存储类型。当您使用错误拼写或其他不正确的存储类型时,这会遇到同样的问题,例如:克。
add_column :administrators, :sign_in_count, :integr
由于:integr
拼写错误,后续迁移会产生to_sym
错误
最好的建议是rake db:rollback
,直到您尚未创建pin
列,然后将列更改为支持的类型,例如:string
add_column :administrators, :pin, :string
你可以rake db:migrate
再次前进。
您还应该在删除时保持一致...
remove_column :administrators, :pin, :string
(当然,如果您不想要该列,只要您回滚足够远,就可以删除add_column
和remove_column
。)
这假设您正在单独工作......如果您正在进行共享开发或部署项目,则需要与处理该项目的其他人协调此问题,并注意所创建的任何表和字段在add_column
迁移和最终迁移之间将重新初始化,因此您可能会在开发(和其他)环境中丢失一些数据。您还需要使用
rake db:test:prepare