Rails 4.2.3 activemodel 在向 table 添加新字段后阻止保存

Rails 4.2.3 activemodel preventing save after adding new fields to table

我使用迁移向名为 brands 的现有 table 添加了两个字段:

def change
  add_column :brands, :about_the_brand, :string, limit: 2000
  add_column :brands, :user_id, :integer
end

迁移运行良好。在 Rails 控制台中:

brand = Brand.first
brand.user_id = 2
brand.save

我明白了:

(0.2ms)  BEGIN
(0.1ms)  ROLLBACK
TypeError: nil is not a symbol

我在任何地方都找不到对此错误的任何有意义的参考。这是一个非常简单的操作,我真的没有看到它失败的原因。

错误来自:

activemodel-4.2.3/lib/active_model/dirty.rb:181:in `attribute_was'

即:

# Handle <tt>*_was</tt> for +method_missing+.
def attribute_was(attr) # :nodoc:
  attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end

在 table 上设置默认主键修复了它:

self.primary_key = 'brand_id'