尝试将Timestamps添加到现有表中.根据Api文档add_timestamps
这是我的迁移代码:
def change
add_timestamps(:products, null: false)
end
Run Code Online (Sandbox Code Playgroud)
得到错误:
- add_timestamps(:products,{:null => false})rails aborted!StandardError:发生错误,此以及所有后续迁移都被取消:SQLite3 :: SQLException:无法添加具有默认值NULL的NOT NULL列:ALTER TABLE"products"ADD"created_at"datetime NOT NULL
我也试过这个帖子中的所有解决方案
同样的错误...... Rails 5.1.4 Ruby 2.4.0
我知道应该有一种方法来初始化模块通过扩展示例添加的类实例变量:
module MyModule
def self.included(base)
base.extend ClassMethods
base.send :include, InstanceMethods
end
module ClassMethods
attr_accessor :count
def self.count
@count = 0
end
count
end
module InstanceMethods
def register
# self.class.count = 0 if self.class.count.nil?
self.class.count += 1
end
end
end
class Foo
include MyModule
private
def initialize
register
end
end
Run Code Online (Sandbox Code Playgroud)
在 ClassMethods 中应该是一种初始化计数的方法,但是当我执行时,我总是捕获错误“undefined method `+' for nil:NilClass”
f = Foo.new
Run Code Online (Sandbox Code Playgroud)
如果我取消注释行,模块 InstanceMethods 中没有问题
# self.class.count = 0 if self.class.count.nil?
Run Code Online (Sandbox Code Playgroud)
正常工作!