Rails 4 DB Migration Error: undefined method `to_sym' for nil:NilClass
Rails 4 DB Migration Error: undefined method `to_sym' for nil:NilClass
我对 rails 比较陌生,正在编写应用程序。到目前为止,该应用程序本身运行良好。最近我想迁移这样的东西:(更新)
class ChangeStuffFromTools < ActiveRecord::Migration
def change
change_column :tools, :shares, :integer, :default => 0
change_column :tools, :views, :integer, :default => 0
change_column :tools, :likes, :integer, :default => 0
change_column :tools, :favorites, :integer, :default => 0
change_column :tools, :featured, :boolean, :default => false
end
end
我收到这个错误:
$ rails g migration remove_stuff_from_tools
invoke active_record
create db/migrate/20160904090608_remove_stuff_from_tools.rb
Jonas@JONAS_PC ~/gitapps/ocubit (master)
$ rake db:migrate
== 20160904090608 RemoveStuffFromTools: migrating =============================
-- remove_column(:tools, :featured, :boolean)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
undefined method `to_sym' for nil:NilClass
c:/Users/Jonas/gitapps/ocubit/db/migrate/20160904090608_remove_stuff_from_tools.rb:3:in
change'
c:inmigrate' NoMethodError: undefined method to_sym' for nil:NilClass
c:/Users/Jonas/gitapps/ocubit/db/migrate/20160904090608_remove_stuff_from_tools.rb:3:in
change' c:in `migrate' Tasks: TOP => db:migrate (See full trace by running task with --trace)
我怎么可能修复它,我的意思是我需要以某种方式访问我的数据库来编辑它:)
remove_column 的语法是:
remove_column table_name, feild name
所以尝试:
class RemoveStuffFromTools < ActiveRecord::Migration
def change
remove_column :tools, :featured
remove_column :tools, :shares
remove_column :tools, :views
remove_column :tools, :likes
remove_column :tools, :favorites
end
end
更新:
不支持 sqlite remove_column
,对于简单的开发数据库,您可以:
更新原来的 create_table_migration
并删除不需要的列。
重新创建您的数据库:rake db:drop
然后 rake db:create
最后 rake db:migrate
如果需要更改列的默认值或空值,也可以使用以下方法:
change_column_default(:accounts, :authorized, 1)
change_column_null(:users, :nickname, false)
欲了解更多信息,here are more migration methods
我对 rails 比较陌生,正在编写应用程序。到目前为止,该应用程序本身运行良好。最近我想迁移这样的东西:(更新)
class ChangeStuffFromTools < ActiveRecord::Migration
def change
change_column :tools, :shares, :integer, :default => 0
change_column :tools, :views, :integer, :default => 0
change_column :tools, :likes, :integer, :default => 0
change_column :tools, :favorites, :integer, :default => 0
change_column :tools, :featured, :boolean, :default => false
end
end
我收到这个错误:
$ rails g migration remove_stuff_from_tools
invoke active_record
create db/migrate/20160904090608_remove_stuff_from_tools.rb
Jonas@JONAS_PC ~/gitapps/ocubit (master)
$ rake db:migrate
== 20160904090608 RemoveStuffFromTools: migrating =============================
-- remove_column(:tools, :featured, :boolean)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
undefined method `to_sym' for nil:NilClass
c:/Users/Jonas/gitapps/ocubit/db/migrate/20160904090608_remove_stuff_from_tools.rb:3:in
change'
c:inmigrate' NoMethodError: undefined method to_sym' for nil:NilClass
c:/Users/Jonas/gitapps/ocubit/db/migrate/20160904090608_remove_stuff_from_tools.rb:3:in
change' c:in `migrate' Tasks: TOP => db:migrate (See full trace by running task with --trace)
我怎么可能修复它,我的意思是我需要以某种方式访问我的数据库来编辑它:)
remove_column 的语法是:
remove_column table_name, feild name
所以尝试:
class RemoveStuffFromTools < ActiveRecord::Migration
def change
remove_column :tools, :featured
remove_column :tools, :shares
remove_column :tools, :views
remove_column :tools, :likes
remove_column :tools, :favorites
end
end
更新:
不支持 sqlite remove_column
,对于简单的开发数据库,您可以:
更新原来的
create_table_migration
并删除不需要的列。重新创建您的数据库:
rake db:drop
然后rake db:create
最后rake db:migrate
如果需要更改列的默认值或空值,也可以使用以下方法:
change_column_default(:accounts, :authorized, 1)
change_column_null(:users, :nickname, false)
欲了解更多信息,here are more migration methods