【问题标题】:Rails 4 DB Migration Error: undefined method `to_sym' for nil:NilClassRails 4 DB 迁移错误:nil:NilClass 的未定义方法“to_sym”
【发布时间】:2017-01-11 22:19:07
【问题描述】:

我对 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)

我怎么可能修复它,我的意思是我需要访问我的数据库来编辑它:)

【问题讨论】:

    标签: ruby-on-rails database ruby-on-rails-4 database-migration rails-migrations


    【解决方案1】:

    如果需要更改列的默认值或空值,也可以使用以下方法:

    change_column_default(:accounts, :authorized, 1)
    change_column_null(:users, :nickname, false)
    

    欲了解更多信息,here are more migration methods

    【讨论】:

      【解决方案2】:

      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 不支持,对于简单的开发数据库,​​您可以:

      1. 更新您原来的 create_table_migration 并删除不需要的列。

      2. 重新创建您的数据库:rake db:drop,然后是 rake db:create,最后是 rake db:migrate

      【讨论】:

      • 嗯,这就是我之前尝试过的 - 弹出相同的错误。不过感谢您的回答。
      • @J.Hübotter 您在使用 sqlite 吗?重新检查列名拼写
      • 是的,与默认值相比没有任何变化,列拼写正确
      • 我不认为 sqlite 支持 remove_column stackoverflow.com/questions/8442147/… 。有一些 hacky 方式 stackoverflow.com/questions/5938048/… 但如果它处于开发阶段,应该删除并重新创建
      • 有没有更简单的方法来更新这些列?
      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 2012-12-27
      相关资源
      最近更新 更多