我的Rails 4.1.5应用程序在Ruby 2.1上,并使用postgresql和hstore for store_accessor。从新数据库开始:
rake db:migrate; rake db:seed
......一切正常。
再次回滚和转发,这是问题开始的地方:
rake db:migrate VERSION=0; rake db:migrate; rake db:seed
如果我尝试访问任何“属性”,模型会报告“未定义的方法访问器”。
undefined method `accessor' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::Identity:0xyaddayadda>
模型使用store_accessor和postrgesql的hstore。模型的定义如下:
class Foo < ActiveRecord::Base
...
store_accessor :properties, :color, :material, :brand
...
end
迁移的定义如下:
class CreateFoos < ActiveRecord::Migration
def change
enable_extension "hstore"
create_table :foos do |t|
t.hstore :properties
t.timestamps
end
end
end
为了解决问题,我可以在重新创建之前彻底清除数据库:
rake db:migrate VERSION=0; rake db:drop:all; rake db:create; rake db:migrate; rake db:seed
这样做意味着每次都停止并重新启动测试和开发环境,这很麻烦。
我尝试添加另一个启用/禁用hstore的迁移:
class AddHstore < ActiveRecord::Migration
def up
enable_extension :hstore
end
def down
disable_extension :hstore
end
end
这在Foo迁移之前运行。
我怀疑这是posgresql ActiveRecord连接器的问题。我有可能使用这个错误,所以我想把它们反弹给你们。