【发布时间】:2015-09-07 15:13:48
【问题描述】:
我有一个名为“products”的表(模型是 Product),在迁移上下文中运行时我无法访问 :uuid 属性。迁移本身不会改变结构,但会访问并创建新对象来填充数据库。
这是迁移前 schema.rb 的 sn-p:
create_table "products", force: :cascade do |t|
t.string "title"
t.string "description"
t.string "price"
t.uuid "uuid"
end
Product对象定义如下:
class Product < ActiveRecord::Base
end
现在在 Rails 控制台/代码中运行时可以正常工作:
p = Product.create!(:uuid => xxx)
puts p.uuid # => xxx
puts p.inspect # => Product(title: string, description: string, price: string, uuid: uuid)
但是在迁移上下文中运行时 - 相同的代码会引发异常:
p = Product.create!(:uuid => xxx)
puts p.uuid # => undefined method `uuid' for <Product:0x007fea6d7aa058>/opt/rubies/2.2.0/lib/ruby/gems/2.2.0/gems/activemodel-4.2.3/lib/active_model/attribute_methods.rb:433
puts p.inspect # => Product(title: string, description: string, price: string)
缺少 uuid 属性!怎么了?
【问题讨论】:
-
您能发布整个迁移文件吗?
-
你在使用
PostgreSQL >= 9.4吗? -
@BroiStatse 嗯.. 我会这样做,但不幸的是它包含太多私有代码
-
@pavan 是的,事实上我们使用的是 Postgres 9.4
标签: ruby-on-rails ruby ruby-on-rails-4 migration rails-migrations