有一个奇怪的问题:
布尔字段未保存在Heroku上(本地工作正常)
细节:
Rails 2.3 on Heroku (bamboo-ree-1.8.7).
Run Code Online (Sandbox Code Playgroud)
移民
def self.up
add_column :users, :send_contact_emails, :boolean, :default => false
end
Run Code Online (Sandbox Code Playgroud)
在Heroku上:
>> u = User.last
=> #<User id: 100, ......
>> u.send_contact_emails = true
=> true
>> u.save
=> true
>> x = User.last
=> #<User id: 100, ...
>> x.send_contact_emails
=> nil <---------------------------- Why is this ?
Run Code Online (Sandbox Code Playgroud)
当我在本地执行此操作(Postgresql 8.4)时,它按预期工作.
有任何想法吗 ?
编辑:
直接在DB上进行一些测试:
>> ActiveRecord::Base.connection.execute("SELECT send_contact_emails from users where id = 100")[0]
=> {"send_contact_emails"=>nil}
>> ActiveRecord::Base.connection.execute("UPDATE users SET send_contact_emails=FALSE where …Run Code Online (Sandbox Code Playgroud) postgresql activerecord ruby-on-rails heroku rails-postgresql
我的迁移看起来像这样:
create table :posts do |t|
t.string :tags, array: true, default: []
end
Run Code Online (Sandbox Code Playgroud)
如何在所有帖子中获取存储在标签下的所有唯一标签的数组?
ruby postgresql ruby-on-rails rails-postgresql ruby-on-rails-4
在 PostgreSQL 中,我需要一种方法来确定当前时间是否在具有 opens_at 和 closes_at 时间戳的某个模型的操作小时内。这样做的有效 Postgres 方式是什么。
对于 Sqlite3,我有:
(opens_at > closes_at AND
(TIME(opens_at) > :now OR :now < TIME(closes_at)))
OR
(closes_at > opens_at AND
(TIME(opens_at) < :now AND TIME(closes_at) > :now))
Run Code Online (Sandbox Code Playgroud)
我忘了提到这正在运行,ActiveRecord所以:now实际上等于当前的 UTC 时间。
我有一个Postgres 9.6表,其中某些列必须是唯一的.如果我尝试插入重复的行,我希望Postgres简单地忽略插入并继续,而不是失败或中止.如果插入包含在事务中,则不应中止事务或影响事务中的其他更新.
我假设有一种方法来创建如上所述的表,但我还没有想出来.
如果您可以告诉我如何在Rails中执行此操作,可以获得奖励积分.
迁移应该是什么样?我想利用jsonb数组查询技术。
postgresql ruby-on-rails rails-postgresql rails-activerecord jsonb
我有一个使用Postgres数据库的Rails应用程序,其中有一个名为geolite_blocks的表.如果我像这样调用ActiveRecord:
GeoliteBlock.find_by_startIpNum 2776360991
Run Code Online (Sandbox Code Playgroud)
查询完美无缺.但是,如果我这样做的查询:
GeoliteBlock.where("startIpNum >= ?", 2776360991)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ActiveRecord::StatementInvalid: PGError: ERROR: column "startipnum" does not exist
LINE 1: ... "geolite_blocks".* FROM "geolite_blocks" WHERE (startIpNum...
^
: SELECT "geolite_blocks".* FROM "geolite_blocks" WHERE (startIpNum >= 2776360991)
Run Code Online (Sandbox Code Playgroud)
但我知道该列存在,因为我只是用第一个代码示例查询它.关于为什么会发生这种情况的任何想法,以及我如何消除它?谢谢你的帮助!
我有一个名为Container列的Rails模型products.它是Postgres和'postgres_ext'gem支持的字符串数组.
GEMFILE的相关部分是:
gem 'rails', '3.2.9'
gem 'pg'
gem 'postgres_ext'
gem 'activerecord-postgres-hstore', git: 'git://github.com/engageis/activerecord-postgres-hstore.git'
Run Code Online (Sandbox Code Playgroud)
迁移的相关部分是:
t.string :products, array: true
Run Code Online (Sandbox Code Playgroud)
我正在我的Container模型中编写一个公共方法,它将产品添加到此数组中.该方法如下所示:
attr_accessible :products
def add_to_products(product)
if products.blank? || products.size == 0 ## product array is either uninstantiated or blank
products = [product.id]
else
unless products.include? product.id
products << product.id
end
end
end
Run Code Online (Sandbox Code Playgroud)
这些是irb/console中的结果:
pry(main)> c = Container.first
=> #<Container id: "2765cc19-98f8-4e42-a1be-538788424ec7", name:....
pry(main)> p = Product.first
=> #<Product id: "319a25ae-87fe-4769-a9de-1a8e0db9e84f", name: ....
pry(main)> c.add_to_products(product)
pry(main)> c.products …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Heroku上运行我的应用程序,我无法通过'rake db:migrate'命令.我一直收到这个错误:rake aborted!发生错误,此以及所有后续迁移都已取消:
PG ::错误:错误:必须是扩展名plpgsql的所有者
任何的想法?
ps这是完整的错误日志:http://pastebin.com/iYeiMD2y
我正在使用由亚马逊托管的postgres数据库在heroku上运行一个rails应用程序.我尝试了一个永远不会结束的迁移(超过40分钟)并且运行了太多次.现在我有20个连接打开数据库,这是最大的,不知道如何关闭这些连接.
我能做什么?
在Mysql上它可以正常工作.
PG ::错误:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表LINE 1中:) ORDER BY programs.rating DESC,program_sc ... ^:
查询:
SELECT DISTINCT"programs".*FROM"programs"INNER JOIN"program_schedules"ON"program_schedules"."program_id"="programs"."id"WHERE(programs.rating> = 5 AND program_schedules.start> ='2012-11 -03 23:14:43.457659')AND(ptype ='movie')ORDER BY programs.rating DESC,program_schedules.start DESC
Rails代码:
@data = Program.joins(:program_schedules).where('programs.rating> =?AND program_schedules.start> =?',5,Time.now).order('programs.rating DESC,program_schedules.start DESC') .uniq
我试过了
Program.select("programs.*,program_schedules.*).join(:program_schedules).where(...
但是,就这样,当我要读书的时候
@ data.program_schedules
我得到一个零值(当我知道没有零值)
关于我的DB的一些信息:
class Program < ActiveRecord::Base
has_many :program_schedules
end
class ProgramSchedule < ActiveRecord::Base
belongs_to :program
end
Run Code Online (Sandbox Code Playgroud)
Schema.db
create_table "program_schedules", :force => true do |t|
t.integer "program_id"
t.datetime "start"
end
create_table "programs", :force => true …Run Code Online (Sandbox Code Playgroud) rails-postgresql ×10
postgresql ×8
heroku ×3
activerecord ×2
ruby ×2
jsonb ×1
postgres-9.6 ×1
postgres-ext ×1
sql ×1