我基本上有以下代码:
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 上运行良好,连接子句也被复制到请求的更新部分中)
我有一个正在摆弄的应用程序。(没有创建它,但尝试摆弄它并了解有关查询它的更多信息等)。
所以,它有很多桌子。
因此,当我进入控制台并询问 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)
为什么我会收到这些错误?
这些是实际的表,其中确实有数据。
我是否错误地查询了驼峰表?
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)
任何人都可以帮我从数组中删除空值吗?
我在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) 我正在使用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
我正在尝试使用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) 我正在使用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)
但是,这似乎不起作用,我总是得到一个空数组的结果作为回报.我究竟做错了什么?还有另一种方法吗?
我在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完成这个.
昨天我安装了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
如何在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']可以.
rails-postgresql ×10
postgresql ×4
ruby ×3
hstore ×2
pg ×2
sqlite ×2
activerecord ×1
arel ×1
arrays ×1
database ×1
json ×1
null ×1
pg-search ×1
rspec ×1
sql ×1