Tag: postgresql

在Rails 5.0.0.beta3,-api选项中使用accepts_nested_attributes_for时出现问题

我正在使用Rails 5.0.0.beta3,使用rails new上的-app选项构建一个仅限API的应用程序,而我在使用accepts_nested_attributes_for时遇到了问题。 在我的应用程序中,具有嵌套属性的对象的创建(或新的,然后保存!)失败,并显示父父对象必须存在的消息。 为了测试,我制作了一个新的应用程序,只使用了ANAF文档中的成员和post的测试用例: class Member < ApplicationRecord has_many :posts accepts_nested_attributes_for :posts end 和 class Post < ApplicationRecord belongs_to :member end (这些类定义是由Rails脚手架生成器生成的,所以inheritance自ApplicationRecord,而不是ActiveRecord :: Base,但是根据这篇文章 ,这并不重要。) 对于已定义的类别,以及创建和运行的匹配迁移,我启动了Rails控制台并按照文档中的步骤操作: params = { member: { name: ‘joe’, posts_attributes: [ { title: ‘Kari, the awesome Ruby documentation browser!’ }, { title: ‘The egalitarian assumption of the modern citizen’ }, […]

正确的全文索引Rails / PostgreSQL / pg_search

我正在测试PostgreSQL全文搜索(使用pg_search gem)和solr(sunspot_solr gem)的性能。 对于400万条记录,我获得了13456毫秒的Tsearch和800毫秒的SOLR (即SOLR查询+数据库回溯)。 很明显,我需要索引,但我不知道如何创建一个全文搜索。 我调查并发现,对于全文搜索,我应该使用GIN索引。 execute “CREATE INDEX products_gin_title ON products USING GIN(to_tsvector(‘english’, title))” 但我正在搜索另外两列,我需要多值索引,我不知道如何实现它? 我对DB部分不是很熟悉。 我的搜索代码如下: @results = Product.search_title(params[:search_term]).where(“platform_id=? AND product_type=?”, params[:platform_id], params[:type_id]).limit(10).all 如何为此类情况创建正确的查询? 这是来自rails的搜索词车的 SQL输出。 Product Load (12494.0ms) SELECT “products”.*, ( ts_rank((to_tsvector(‘simple’, coalesce(“products”.”title”::text, ”))), (to_ tsquery(‘simple’, ”’ ‘ || ‘car’ || ‘ ”’)), 2) ) AS pg_search_rank FROM “products” WHERE (((to_tsvector(‘simple’, […]

Rails通过连接表获得关联计数

这个问题是Rails中HABTM协会的一个分支:收集和计算模型儿童的类别 。 鉴于: class Category < ActiveRecord::Base has_and_belongs_to_many :books validates_uniqueness_of :name end class Book < ActiveRecord::Base has_and_belongs_to_many :categories end class Store < ActiveRecord::Base has_many :books has_many :categories, through: :books end 任务: 给定商店,列出每个类别的书籍数量。 Store.first.books_per_category 期望的输出: [ { name: ‘mystery’, count: 5 }, { name: ‘fantasy’, count: 6 } ] 然而,每家商店可能拥有大量的书籍和类别 。 我正在尝试创建一个单一的高性能查询,该查询只获取名称列和每个与商店关联的不同类别的书籍计数,而不将书籍加载到内存中。 我到目前为止尝试过: class Store < […]

datetime_select的多参数错误

我的表单中有以下代码。 {:day => ‘Day’, :month => ‘Month’, :year => ‘Year’}, :start_year => Date.today.year, :end_year => Date.today.year + 2, :minute_step => 15, :include_blank => false) %> if either one is blank. 当其中一个字段留空时, 我得到: 1 error(s) on assignment of multiparameter attributes 正在传递的参数是: {“utf8″=>”✓”, “authenticity_token”=>”kQpfsj5RxnDtxkvBdwPEFnX1fY6euKnMQeDRAkvJvIE=”, “event”=>{“description”=>””, “venue”=>””, “street”=>””, “city”=>””, “country_id”=>””, “date_time(1i)”=>””, “date_time(2i)”=>””, “date_time(3i)”=>””, “date_time(4i)”=>”00”, “date_time(5i)”=>”00”, “ticket_url”=>””}, “x”=>”94”, “y”=>”12”} […]

Ruby on Rails + PostgreSQL:自定义序列的使用

假设我有一个名为Transaction的模型,它具有:transaction_code属性。 我希望该属性自动填充可能与id不同的序列号(例如, id=1 Transaction可能具有transaction_code=1000 )。 我试图在postgres上创建一个序列,然后将transaction_code列的默认值作为该序列的nextval 。 问题是,如果我没有在RoR上为@transaction.transaction_code分配任何值,当我在RoR上发出@transaction.save时,它会尝试执行以下SQL: INSERT INTO transactions (transaction_code) VALUES (NULL); 这样做是在Transactions表上创建一个新行,其中transaction_code为NULL,而不是计算序列的nextval并将其插入相应的列。 因此,正如我所发现的,如果你为postgres指定NULL,它假定你真的想要在该列中插入NULL,无论它是否具有默认值(我来自ORACLE,它具有不同的行为)。 我对这方面的任何解决方案持开放态度,无论是在数据库上还是在RoR上: 要么有办法从ActiveRecord的save排除属性 或者有一种方法可以在插入触发器之前更改列的值 或者有一种方法可以在RoR中生成这些序列号 或任何其他方式,只要它的工作原理:-) 提前致谢。

如何从SQLite迁移到PostgreSQL(Rails)

我是一个DB菜鸟,所以请和我好心。 我有一些问题通过点击gem将我的SQLite DB推送到Heroku。 与他们交谈,他们告诉我其中一个解决方案可能是将我的数据库从SQLite转换为PostgreSQL。 有一个简单的方法吗? 谢谢 更多信息: – 来自Rails应用程序的数据库 – 我在Mac OS X上 – 刚刚通过macports安装了PostgreSQL

优雅的PostgreSQL Group for Ruby on Rails / ActiveRecord

尝试使用PostgreSQL检索按日期分组的ActiveRecord对象数组。 更具体地说,我正在尝试翻译以下MySQL查询: @posts = Post.all(:group => “date(date)”, :conditions => [“location_id = ? and published = ?”, @location.id, true], :order => “created_at DESC”) 我知道PostgreSQL对SQL标准的解释比MySQL更严格,因此这种类型的查询将无法工作……并且已经阅读了StackOverflow和其他主题上的一些post – 但它们似乎都不是关于这个问题的明确答案 我已经尝试过各种各样的查询组合,分组和不同的条款没有太大的乐趣 – 目前我有一个相当不优雅的黑客,虽然作品让我脸红时看着它。 使用Rails和PostgreSQL进行此类查询的正确方法是什么? (忽略肯定这应该在ActiveRecord级别抽象出来的事实)

Rails schema.rb不包含新的自定义Postgres函数

我刚刚通过常规迁移创建了一个新的自定义Postgresfunction。 class CreateBestBowlingFigureFunction < ActiveRecord::Migration def change execute "CREATE OR REPLACE FUNCTION ……" end end 迁移后,schema.rb中不提供此新function。 根据官方文档,我使用命令db:schema:load在运行测试之前创建模式。 那么,在运行测试之前创建自定义函数的最佳做法是什么?

如何通过rails迁移设置Postgres中主键(ID)列的起始点

我正在将一个rails应用程序部署到heroku,后者使用PostgreSQL作为后端。 在我的数据库迁移中,我通常会将报告等内容的ID字段设置为至少1000,大多数客户似乎不喜欢从1开始。 通常我使用mysql,我只是在创建表后添加一个特定的sql: def self.up create_table :reports do |t| t.references :something … end execute(“ALTER TABLE reports AUTO_INCREMENT = 1000;”) end 有没有人知道如何为PostgreSQL实现同样的目标,理想情况下我希望迁移来构建表本身,这样就不是特定于DB的。 我想实现我的目标的一个愚蠢的方法是在循环中创建和删除999条记录,哎哟。

将Rails模型连接到数据库视图?

我听说你可以将rails中的模型绑定到数据库视图(而不是通常的表格),这只是通过创建一个具有模型表通常具有的名称的视图来实现圆顶。 我没有让它在带有PostgreSQL 9的rails 3.0.5中运行。 有什么我想念的吗?