小编D.K*_*K.S的帖子

将时间戳添加到db Rails 5+中的现有表

尝试将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

ruby migration ruby-on-rails

8
推荐指数
2
解决办法
4666
查看次数

类实例变量在扩展模块中初始化

我知道应该有一种方法来初始化模块通过扩展示例添加的类实例变量:

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)

正常工作!

ruby

1
推荐指数
1
解决办法
289
查看次数

标签 统计

ruby ×2

migration ×1

ruby-on-rails ×1