首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在辛纳特拉的简单应用程序中使PostgreSQL与Hstore一起工作?

如何在辛纳特拉的简单应用程序中使PostgreSQL与Hstore一起工作?
EN

Stack Overflow用户
提问于 2014-03-27 13:23:22
回答 1查看 407关注 0票数 1

我试图在Postgre数据库中使用sinatra 1.4.4和sinatra-activerecord (1.5.0)。

我和ruby-1.9.3-p 392一起工作

代码语言:javascript
复制
gem 'sinatra'
gem 'thin'
gem 'sinatra-formhelpers'
gem 'pg'
gem 'activerecord'
gem "sinatra-activerecord"
gem 'rake'
gem 'activerecord-postgres-hstore'
gem 'activesupport'
group :development, :test do
  gem 'rspec'
  gem 'capybara'
  gem 'pry'
end

这些是我的迁徙:

代码语言:javascript
复制
class AddHstore < ActiveRecord::Migration
  def up
    execute 'CREATE EXTENSION hstore'
  end

  def down
    execute 'DROP EXTENSION hstore'
  end
end

代码语言:javascript
复制
class CreateEngineParameters < ActiveRecord::Migration

  def self.up
    create_table :engine_parameters do |t|
      t.hstore :kind
      t.timestamps
    end
  end

  def self.down
    drop_table :engine_parameters
  end
end

使用模型engine_parameter.rb中的这些行:

代码语言:javascript
复制
require 'active_record'
require 'activerecord-postgres-hstore'

class EngineParameter < ActiveRecord::Base
  serialize :kind, ActiveRecord::Coders::Hstore
end

然后,在控制台中,我想要创建一个带有hstore的对象:

代码语言:javascript
复制
a = EngineParameter.new
=> #<EngineParameter id: nil, kind: {}, created_at: nil, updated_at: nil>
a.kind['test'] = "test"
=> "test"
a
=> #<EngineParameter id: nil, kind: {"test"=>"test"}, created_at: nil, updated_at: nil>
a.save
NoMethodError: undefined method `scan' for {"test"=>"test"}:Hash
from /Users/mycomputername/.rvm/gems/ruby-1.9.3-p392@myproject/gems/pg-hstore-1.2.0/lib/pg_hstore.rb:24:in `load'

然后我又试了一次:

代码语言:javascript
复制
a.save
NoMethodError: undefined method `map' for "\"test\"=>\"test\"":String
from /Users/mycomputername/.rvm/gems/ruby-1.9.3-p392@myproject/gems/pg-hstore-1.2.0/lib/pg_hstore.rb:49:in `dump'

我没有找到我问题的答案。离这里最近的是:https://gist.github.com/bru/3258069,但还不够。

有件事我做错了,但找不到什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-19 16:08:56

好的,我问了这个问题后不久就找到了答案。

有了新的activerecord,即使是在sinatra,你只要把这个

代码语言:javascript
复制
require 'active_record'
require 'activerecord-postgres-hstore'

class EngineParameter < ActiveRecord::Base

  # don't do this
  # serialize :kind, ActiveRecord::Coders::Hstore

  # do this
  store_accessor :kind

end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22689000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档