标签: rails-postgresql

Rails:用另一个表中的列的值更新列

我基本上有以下代码:

ModelA.join(:modelB).update_all('modelA.column = modelB.column')
Run Code Online (Sandbox Code Playgroud)

失败了:

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "modelB"
LINE 1: ..." SET modelAs.column = modelBs...
                                                         ^
UPDATE "modelAs" SET modelAs.column = modelBs.column WHERE "modelAs"."id" IN (
  SELECT "modelAs"."id" FROM "modelAs" INNER JOIN "modelBs" ON "modelBs"."id" = "modelAs"."modelB_id"
)
Run Code Online (Sandbox Code Playgroud)

查看生成的 sql 请求,很明显 Postgresql 希望 modelB 表出现在查询的更新部分。有办法做到这一点还是一个错误?

(该问题特定于 Postgresql / Postgresql Rails 适配器。上面的代码在 MySQL 上运行良好,连接子句也被复制到请求的更新部分中)

postgresql activerecord ruby-on-rails rails-postgresql

6
推荐指数
0
解决办法
1913
查看次数

如何在 Rails 控制台中查询表

我有一个正在摆弄的应用程序。(没有创建它,但尝试摆弄它并了解有关查询它的更多信息等)。

所以,它有很多桌子。

因此,当我进入控制台并询问 User.first 时,我显然得到了第一个。

(顺便说一句,你将它大写并使其成为单数,对吧?即使表格是小写和复数?)

但是当我要求时,说 Tutor_appointment.first,这就是我得到的

`NameError: uninitialized constant Tutor_appointment from (pry):25:in `<main>'
Run Code Online (Sandbox Code Playgroud)

或者甚至说,User_profile.first,同样的事情:

`NameError: uninitialized constant User_Profile from (pry):30:in `<main>'
Run Code Online (Sandbox Code Playgroud)

为什么我会收到这些错误?

这些是实际的表,其中确实有数据。

我是否错误地查询了驼峰表?

ruby sql postgresql ruby-on-rails rails-postgresql

6
推荐指数
1
解决办法
7842
查看次数

在PostgreSQL中替换数组中的NULL值

SELECT ARRAY [1,2,3] - ARRAY [5,NULL,6]

我在postgresql 8.4中使用contrib _int.sql包进行数组操作.在上面的查询NULL中,右侧有一个数组.由于此NULL值,它会引发错误:

"ERROR:  array must not contain nulls"
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我从数组中删除空值吗?

arrays postgresql null rails-postgresql

5
推荐指数
1
解决办法
7155
查看次数

Rails:带有PG gem的Sqlite

我在Mac上安装了postgres并且第一次使用Rails进行了尝试.我包含了gem"pg"并删除了sqlite3 gem(毕竟,如果使用前者,为什么还需要后者).但是,当我尝试启动服务器时,我收到此错误消息

.rvm/gems/ruby-1.9.3-rc1@rails321/gems/bundler-1.0.22/lib/bundler/rubygems_integration.rb:143:in `block in replace_gem': Please install the sqlite3 adapter: `gem install activerecord-sqlite3-adapter` (sqlite3 is not part of the bundle. Add it to Gemfile.) (LoadError)
Run Code Online (Sandbox Code Playgroud)

所以我再次包含sqlite3 gem,现在服务器工作正常,但我实际上不知道我的测试应用程序是否使用sqlite3或pg?

a)如果我打算使用pg gem,我是否应该安装sqlite3 gem?b)如果我只应该安装两个中的一个,有没有办法找出我的测试应用当前正在使用哪一个(因为它们都在Gemfile中)

的Gemfile

source 'https://rubygems.org'

gem 'rails', '3.2.1'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'pg'
gem 'devise'
gem 'sqlite3'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1' …
Run Code Online (Sandbox Code Playgroud)

sqlite postgresql ruby-on-rails rails-postgresql

5
推荐指数
1
解决办法
6441
查看次数

构建和存储复杂的SQL查询以供以后编辑

我正在使用Rails 3.2.8构建一个"产品集"构建器,该构建器反映了Google Analytics的"自定义配置文件"构建器.例如,用户可以如下定义产品集:

(Category ='Printers')和((Name包含'Wireless')或(Name包含'Wifi'))

我的产品数据存储在Postgres(9.1.4)中,使用HStore列存储动态产品属性.我已经构建了一个可以使用Arel构造查询的表单,但是我坚持以下要求:
1.查询必须序列化到数据库.我可以存储.to_sql字符串,但后来坚持......
2.我必须能够重建用户的表单以便以后编辑,因为这些不是一次性搜索,而是共享查询.

如何以可以轻松重建用户定义查询的方式进行序列化?

ruby-on-rails arel rails-postgresql ruby-on-rails-3.2 hstore

5
推荐指数
1
解决办法
525
查看次数

RSpec,Rails 4,Postgres,UUID主键:id为Rake + RSpec为null,但在RSpec或控制台中没问题

我正在尝试使用UgID主键来运行Postgres和Rails 4.0.0.rc2的模型,但是我的规格无法创建和销毁,但是MyThing.create还是MyThing#destroy在rails控制台上工作正常(在开发和测试中都是如此)环境)....直到我运行规范,在这种情况下,通过控制台停止工作.因此,当我运行我的规范改变我的数据库并禁止UUID密钥继续工作时,它看起来就像发生了什么.

HALP?

我按照这篇博客文章来生成我的迁移,因此我的架构看起来像:

ActiveRecord::Schema.define(version: 20130613174601) do
  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"
  enable_extension "uuid-ossp"

  create_table "growers", id: false, force: true do |t|
    t.uuid     "id",         null: false
    t.string   "name"
    t.string   "code"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
end
Run Code Online (Sandbox Code Playgroud)

这是事物的进展:

创建: $ rake db:create RAILS_ENV=test

迁移:

$ rake db:migrate RAILS_ENV=test
==  CreateGrowers: migrating ==================================================
-- enable_extension("uuid-ossp")
   -> 0.0052s
-- create_table(:growers, {:id=>:uuid})
   -> 0.0043s
==  CreateGrowers: migrated …
Run Code Online (Sandbox Code Playgroud)

rspec rails-postgresql ruby-on-rails-4

5
推荐指数
1
解决办法
3147
查看次数

查找大于使用hstore和rails的值

我正在使用rails中的hstore和postgresql存储产品信息,包括产品的发布年份.现在,我希望能够查询在特定年份之前或之后发布的所有产品.我可以使用以下方法查询'data'hstore列中包含year字段的所有记录:

Product.where("data ? 'year'")
Run Code Online (Sandbox Code Playgroud)

由于hstore,年份值存储为字符串.因此,我尝试将年份类型转换为整数,以便查找年份大于/小于X的记录:

Product.where("(data ? 'year')::int > 2011")
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用,我总是得到一个空数组的结果作为回报.我究竟做错了什么?还有另一种方法吗?

ruby ruby-on-rails pg rails-postgresql hstore

5
推荐指数
1
解决办法
1014
查看次数

使用pg_search匹配特殊字符(例如#,+)

我在Rails应用程序中使用pg_search gem来搜索用户 - 他们的bios和相关的技能模型.用户是开发人员,所以他们的技能包括"CSS","C++","C#","Objective C"等等......

我最初使用以下搜索范围:

pg_search_scope :search,
  against: [:bio],
  using: {tsearch: {dictionary: "english", prefix: true}},
  associated_against: {user: [:fname, :lname], skills: :name}
Run Code Online (Sandbox Code Playgroud)

但是,如果在这种情况下搜索"C++",则会得到包含"CSS"(包括其他内容)的结果.我更改了范围以使用"简单"字典并删除了前缀:

pg_search_scope :search_without_prefix,
  against: [:bio],
  using: {tsearch: {dictionary: "simple"}}, 
  associated_against: {user: [:fname, :lname], skills: :name}
Run Code Online (Sandbox Code Playgroud)

这解决了一些问题 - 例如,搜索"C++"并不显示"CSS".但是,搜索"C++"或"C#"仍然匹配列出"C"或"Objective C"的用户

我绝对可以做一个基本的ILIKE匹配,但如果可能的话,希望用pg_search完成这个.

ruby ruby-on-rails pg rails-postgresql pg-search

5
推荐指数
1
解决办法
597
查看次数

Rails - Postgres - 无法连接到服务器:连接被拒绝(PG :: ConnectionBad)

昨天我安装了Postgres和pgAdminIII,都运行正常,但重装后它停止工作.之后rails server我有错误信息:

=> Booting Thin
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1216:in `initialize': could not connect to server: Connection refused (PG::ConnectionBad)
        Is the server running on host "localhost" (127.0.0.1) and accepting
        TCP/IP connections on port 5432?
        from /home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1216:in `new'
        from /home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1216:in `connect'
        from /home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:324:in `initialize'
        from /home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
        from /home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
        from /home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_pool.rb:315:in `new_connection'
        from /home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_pool.rb:325:in `checkout_new_connection'
        from /home/home/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_pool.rb:247:in `block (2 levels) in …
Run Code Online (Sandbox Code Playgroud)

database sqlite database-connection ruby-on-rails rails-postgresql

5
推荐指数
1
解决办法
2万
查看次数

Rails4 form_for中的JSON数据类型

如何在rails中将JSON PostgreSQL类型的填充值转换为嵌套形式?

我有一个像这样的模特

title :text
description :text
grid :json
Run Code Online (Sandbox Code Playgroud)

内部属性我想存储维度和其他东西

{
  "cols": 15, 
  "rows": 15
  "pos": {
      "x": 10, 
      "y": 5
  }
}
Run Code Online (Sandbox Code Playgroud)

对应形式为

@form_for @product do |f|
  f.text_field :title 
  f.text_field :description

  f.fields_for :grid do |grid_f|
     grid_f.text_field :cols 
     grid_f.text_field :rows
  end
end 
Run Code Online (Sandbox Code Playgroud)

但是没有填充cols和rows.我是否必须手动创建输入并设置值.或者是因为@ product.grid里面没有符号,而是字符串?

所以@ product.grid [:cols]不起作用,但是@ product.grid ['cols']可以.

json rails-postgresql ruby-on-rails-4

5
推荐指数
1
解决办法
1777
查看次数