Tag: sql

ActiveRecord查找现有表索引

我正在为我正在编写的插件编写一个迁移生成器,我需要能够找到表中的唯一索引,以便我可以修改现有的唯一索引以成为复合唯一索引。 我一直试图找到一种方法来访问表与ActiveRecord的索引。 我只能找到ActiveRecord :: ConnectionAdapters :: PostgreSQLAdapter :: indexes方法,但不幸的是,这只适用于PosgreSQLAdapter。 我需要能够支持其他主要数据库。 我首先使用schema.rb文件来查找索引,这首先起作用,但我很快意识到这是一个糟糕的策略。 我想如果ActiveRecord没有提供能够为多个数据库适配器执行此操作的方法,我可能能够编写特定于适配器的查询以从表中检索索引信息。 如果我需要求助于这种方法,那么确定正在使用的适配器的好方法是什么? 如果有人知道如何让ActiveRecord列出理想的表索引信息。

HABTM找到“AND”连接,而不是“OR”

我有两个模型,与HABTM相关联(实际上使用has_many:两端的连接,以及连接表)。 我需要检索与两个ModelB的BOTH相关联的所有ModelAs。 我不希望ModelB_1的所有ModelAs都与ModelB_2的所有ModelAs连接在一起。 我真的想要所有与BOTH ModelB_1和ModelB_2相关的ModelAs。 它不仅限于2个ModelB,最多可能有50个ModelB,因此必须进行扩展。 我可以使用各种类比来描述问题,我认为比前一段更好地描述了我的问题: * Find all books that were written by all 3 authors together. * Find all movies that had the following 4 actors in them. * Find all blog posts that belonged to BOTH the Rails and Ruby categories for each post. * Find all users that had all […]

在Rails / Heroku上对Postgres数据库的意外SQL查询

我正在使用NewRelic向我的一个Rails应用程序发出一个非常长的请求,发现一些看起来完全是外来的SQL查询占用了相当长的时间。 我已经谷歌了,但我空洞地说出它们是什么,更不用说我是否可以防止它们发生。 SELECT COUNT(*) FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind in (?, ?) AND c.relname = ? AND n.nspname = ANY (current_schemas(false)) …和… SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE […]

如何通过Rails 3中的时间片(总和,平均值,最小值,最大值等)获取聚合数据

如何在Rails 3中创建由时间片聚合的活动关系查询? 我想建立一个查询,每隔n分钟可以为具有特定名称的计数器的每个样本返回min,max,avg,sum,count。 create_table “samples” t.integer “counter_id” t.string “name” t.float “value” t.datetime “created_at” end

如何显示RSpec测试生成的SQL查询日志?

我正在为rails 3应用程序编写规范。 我想测试数据库事务是否真的有效。 能够看到在由规范驱动的情况下生成我的app的sql查询真的很有帮助。 有没有办法像在rails控制台中一样查看查询? 我正在使用Rails 3.0.9,RSpec 2.6和sqlite(稍后将转移到mysql)

Rails的Active Record可以处理SQL聚合查询吗?

刚开始学习活动记录,我想知道如何最好地从涉及SQL聚合查询的多个表中检索数据。 在以下示例中(来自医疗应用程序)我正在为每位患者寻找各种类型的最新事件(例如,上次访问,最后一次实验室测试等)。 正如您从下面的SQL查询中看到的,我正在寻找分组查询中的max(date)值。 我使用find_by_sql来执行此操作 – 但是我想看看如何在不使用find_by_sql的情况下执行此操作。 IOW – 如何使用纯ActiveRecord方法获取所需数据。 下面是我正在测试的表和类defs: 通过Sql查找以检索每种类型的最新条目 – 请注意这里的’max(event_date)’ strsql = “select p.lname, e.patient_id, e.event_type, max(e.event_date) as event_date from events e inner join patients p on e.patient_id = p.id group by p.lname, e.patient_id, e.event_type” 这是示例sql查询结果: lname,patient_id,event_type,latest ‘Hunt’,3,’Labtest’,’2003-05-01 00:00:00’ ‘Hunt’,3,’Visit’,’2003-03-01 00:00:00’ ‘Seifer’,2,’Labtest’,’2002-05-01 00:00:00’ ‘Seifer’,2,’访问’,’2002-03-01 00:00:00’ 表关系是: 表—>患者 – >事件 – >访问 – […]

使用Ruby / Rails ORM建模inheritance

我正在尝试为一个简单的博客系统建模这个inheritance 博客有许多Entries ,但它们的性质可能不同。 我不想为Blog表建模,我关心的是条目: 最简单的条目是具有title和text 但是, Quote没有标题并且有短文 Media有url和comment …… 等等… 使用Ruby on Rails对此进行建模的正确方法是什么? 那是 我应该使用ActiverRecord还是切换到DataMapper? 我想避免使用大量空单元格的“一大表”方法 当我将数据拆分为Entry + PostData , QuoteData等我可以在这些数据中拥有belongs_to :entry而没有has_one ??? 在Entry课程? 这将是在sql和entry.post_data执行此操作的标准方法。可以通过postdata表中的postdata解析postdata 。 编辑:我不想模拟Blog表,我可以这样做,我关心的是条目以及如何将inheritance映射到表。

棘手的活跃记录关系 – 多态双向自我指涉

您如何对出版物(文章,书籍,章节等)的引用和引用进行建模? 出版物可以是文章,书籍或章节,它有许多参考其他出版物和其他出版物参考它(称这些引用) 我需要能够列出出版物之间的关系:出版物中的参考文献以及其他出版物对本出版物的引用 我最初的理解是,这将是处理不同类型的出版物的多态关系,并且它需要双向自联接。 我刺伤了它 Publication belongs_to :writing, :polymorphic =>true has_and_belongs_to_many :references :class_name => “Publication” :join_table => ‘reference_citation’ :foreign_key => ‘reference_id’ :foreign_key => ‘citation_id’ Book, Chapter, Article all have: has_many :publications :as =>writing 我发现这有点令人困惑,所以任何有助于澄清它的建议都会很棒。 甚至是对象和字段命名建议。 [我在这里问了一个不太清楚的问题。] 我也可能需要使用很多通过因为我需要能够破坏关系

ActiveRecord加入查询并在Rails中选择

在我的rails 4应用程序中,客户端(客户端表)可以有许多项目(项目表)。 我在每个表中都有一个名为name的列。 我正在尝试编写join ,然后select将项目用作基表,将客户端用作查找表。 client_id是项目表中的foreign_key : 我写的查询如下: Project.joins(:client).select(‘projects.id,projects.name,clients.name’) 我收到以下回复: Project Load (0.6ms) SELECT projects.id,projects.name,clients.name FROM “projects” INNER JOIN “clients” ON “clients”.”id” = “projects”.”client_id” => #<ActiveRecord::Relation [#]> 如果我尝试别名就像这样: Project.joins(:client).select(‘projects.id,projects.name,clients.name as client_name’) 然后我得到以下回复: Project Load (0.8ms) SELECT projects.id,projects.name,clients.name as client_name FROM “projects” INNER JOIN “clients” ON “clients”.”id” = “projects”.”client_id” => #<ActiveRecord::Relation [#]> 在任何一种情况下,ActiveRecord都会丢失其中一个名称,您可以从上面的响应中看到。 我该怎么写这个查询?

Rails嵌套连接条件的Activerecord

我正在尝试用条件编写嵌套连接查询。 我现在的查询是: Event.joins(:store => :retailer).where(store: {retailer: {id: 2}}) 其中输出以下SQL: SELECT “events”.* FROM “events” INNER JOIN “stores” ON “stores”.”id” = “events”.”store_id” INNER JOIN “retailers” ON “retailers”.”id” = “stores”.”retailer_id” WHERE “store”.”retailer_id” = ‘— :id: 2 ‘ 还有以下错误: SQLite3::SQLException: no such column: store.retailer_id: SELECT “events”.* FROM “events” INNER JOIN “stores” ON “stores”.”id” = “events”.”store_id” INNER JOIN “retailers” ON […]