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'
我使用迁移向名为 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'