用于Active Record的未定义方法`hstore'

时间:2013-05-11 21:16:47

标签: ruby-on-rails postgresql

我正在跟随Ryan Bates在Railscasts http://railscasts.com/episodes/400-what-s-new-in-rails-4第400集中预览Rails 4。他设置应用程序使用postgres(我已经安装)和hstore的演示。他创造了一个像这样的脚手架

rails g scaffold article name content:text published_on:date tags properties:hstore

并且在迁移中执行此操作

execute "create extension hstore"
create_table :articles do |t|
  t.string :name
  t.text :content
  t.date :published_on
  t.string :tags, array: true
  t.hstore :properties
  t.timestamps
end

然而,当我运行此迁移时,我得到一个未定义的方法'hstore'错误。然后我进入我的测试数据库并创建了hstore扩展,如下所示(而不是像Ryan那样在迁移文件中)

psql rails4test2_development
psql (9.2.3)
Type "help" for help.

rails4test2_development=# CREATE EXTENSION hstore;

但是当我运行迁移时遇到了同样的错误。

undefined method `hstore' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:0x007fa7ee7a9138>/Users/me/Sites/rails4test2/db/migrate/20130511204911_create_articles.rb:9:in `block in change'
/Users/me/Sites/rails4test2/db/migrate/20130511204911_create_articles.rb:4:in `change'

任何人都可以帮助我理解为什么这对我不起作用?

2 个答案:

答案 0 :(得分:4)

问题在于,即使我安装了Rails 4 gem,该应用程序仍在使用Rails 3.2,它本身不支持hstore

答案 1 :(得分:0)

我怀疑这是一个有许多潜在原因的问题。对我们来说,原因是seamless_database_pool gem。

https://github.com/bdurand/seamless_database_pool/issues/17