Postgresql数据库查询到Ruby活动记录

乔·塞宾

有表audits和audit_statuses,需要获取两者中不常见的数据。我已经有一个在postgresql中有效的查询,如何将其转换为Ruby活动记录。

以下是Psql查询

SELECT a.name as status,count(b.audit_status_id) as count 
FROM audit_statuses as a,audits as b 
WHERE a.id=b.audit_status_id 
GROUP BY a.name;
rails_id

您的关联模型是Audit belongs_toAudit_status和Audit_status Audits has_many,不是吗?而且您想获得审计所拥有的Audit_statuses的数量,不是吗?

如果是,则应该使用counter_cache有关属地关联的参考书#counter_cache的阅读方法

虽然:counter_cache选项是在包含属地声明的模型上指定的,但实际的列必须添加到关联的模型中。在上述情况下,您需要向Audit_status模型添加一个名为count_audit的列

通过运行count_audit属性添加audit_statuses表:

rails g migration AddCountAuditToAuditStatuses count_audit:integer

并运行 rake db:migrate

在您的模型上看起来像:

class Audit < ActiveRecord::Base
  attr_accessible :audit_status_id, :status
  belongs_to :audit_status, :counter_cache => :count_audit
end

class AuditStatus < ActiveRecord::Base
  attr_accessible :count_audit, :name

  has_many :audits
end

示例创建一条记录 audit_status

irb(main):001:0> audit_status = AuditStatus.create!(:name => "John Noe")
  ←[1m←[36m (0.0ms)←[0m  ←[1mBEGIN←[0m
  ←[1m←[35mSQL (114.0ms)←[0m  INSERT INTO "audit_statuses" ("count_audit", "created_at", "name", "up
dated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["count_audit", nil], ["created_at", Fri, 06 Jun
 2014 15:17:49 WIB +07:00], ["name", "John Noe"], ["updated_at", Fri, 06 Jun 2014 15:17:49 WIB +07:0
0]]
  ←[1m←[36m (17.0ms)←[0m  ←[1mCOMMIT←[0m
=> #<AuditStatus id: 1, name: "John Noe", count_audit: nil, created_at: "2014-06-06 08:17:49", updat
ed_at: "2014-06-06 08:17:49">

并建立审计的两项纪录,并获得audit_status.idaudit_status_id

irb(main):002:0> audit = Audit.create!({:audit_status_id => audit_status.id, :status => true})
  ←[1m←[35m (0.0ms)←[0m  BEGIN
  ←[1m←[36mSQL (6.0ms)←[0m  ←[1mINSERT INTO "audits" ("audit_status_id", "created_at", "status", "up
dated_at") VALUES ($1, $2, $3, $4) RETURNING "id"←[0m  [["audit_status_id", 1], ["created_at", Fri,
06 Jun 2014 15:19:00 WIB +07:00], ["status", true], ["updated_at", Fri, 06 Jun 2014 15:19:00 WIB +07
:00]]
  ←[1m←[35mAuditStatus Load (1.0ms)←[0m  SELECT "audit_statuses".* FROM "audit_statuses" WHERE "audi
t_statuses"."id" = 1 LIMIT 1
  ←[1m←[36mSQL (2.0ms)←[0m  ←[1mUPDATE "audit_statuses" SET "count_audit" = COALESCE("count_audit",
0) + 1 WHERE "audit_statuses"."id" = 1←[0m
  ←[1m←[35m (1.0ms)←[0m  COMMIT
=> #<Audit id: 1, audit_status_id: 1, status: true, created_at: "2014-06-06 08:19:00", updated_at: "
2014-06-06 08:19:00">
irb(main):003:0> audit = Audit.create!({:audit_status_id => audit_status.id, :status => false})
  ←[1m←[36m (1.0ms)←[0m  ←[1mBEGIN←[0m
  ←[1m←[35mSQL (1.0ms)←[0m  INSERT INTO "audits" ("audit_status_id", "created_at", "status", "update
d_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["audit_status_id", 1], ["created_at", Fri, 06 Jun 2
014 15:19:23 WIB +07:00], ["status", false], ["updated_at", Fri, 06 Jun 2014 15:19:23 WIB +07:00]]
  ←[1m←[36mAuditStatus Load (1.0ms)←[0m  ←[1mSELECT "audit_statuses".* FROM "audit_statuses" WHERE "
audit_statuses"."id" = 1 LIMIT 1←[0m
  ←[1m←[35mSQL (0.0ms)←[0m  UPDATE "audit_statuses" SET "count_audit" = COALESCE("count_audit", 0) +
 1 WHERE "audit_statuses"."id" = 1
  ←[1m←[36m (0.0ms)←[0m  ←[1mCOMMIT←[0m
=> #<Audit id: 2, audit_status_id: 1, status: false, created_at: "2014-06-06 08:19:23", updated_at:
"2014-06-06 08:19:23">

因此,您只调用audit_status的记录,如下所示:

irb(main):004:0> @audit_statuses = AuditStatus.all
  ←[1m←[35mAuditStatus Load (1.0ms)←[0m  SELECT "audit_statuses".* FROM "audit_statuses"
=> [#<AuditStatus id: 1, name: "John Noe", count_audit: 2, created_at: "2014-06-06 08:17:49", update
d_at: "2014-06-06 08:17:49">]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby on Rails:更新数据库中的布尔记录

来自分类Dev

从列表<>到数据库记录重复

来自分类Dev

在不重新查询数据库的情况下在rails中对活动记录进行排序?

来自分类Dev

PostgreSQL中的跨数据库查询

来自分类Dev

Laravel用户活动数据库记录器

来自分类Dev

查询具有多种记录类型的CloudKit数据库

来自分类Dev

Postgres数据库查询以过滤活动记录结果

来自分类Dev

关于使用存储在记录中的数据库名称的跨数据库子查询

来自分类Dev

无法使用带有node.js的axios POST将json记录插入到postgresql数据库中?

来自分类Dev

从数据库获取每个n条记录-Ruby on Rails

来自分类Dev

查询数据库postgreSQL

来自分类Dev

通过rake任务中的活动记录以编程方式查询数据库表

来自分类Dev

查询到sqlite数据库出错

来自分类Dev

无法记录正确的时间到数据库

来自分类Dev

查询具有多种记录类型的CloudKit数据库

来自分类Dev

如何不搜索数据库中的活动记录

来自分类Dev

Ruby on Rails活动记录查询

来自分类Dev

SQL查询问题:并非从mysql数据库中的多个表中检索到所有记录

来自分类Dev

显示来自mysql查询数据库的单个记录

来自分类Dev

数据库字段到MySQL查询

来自分类Dev

根据select查询结果更新数据库记录

来自分类Dev

Rails 5.1 (postgresql):高效的数据库查询来选择父记录和过滤的子记录

来自分类Dev

从我的 firebase 数据库读取数据到活动

来自分类Dev

如何使用id跨数据库查询记录

来自分类Dev

进行 MS Access 查询,允许通过 ODBC 驱动程序将数据输入到 PostgreSQL 数据库

来自分类Dev

如何使用Ruby修复csv文件中的标题然后复制到postgresql数据库?

来自分类Dev

无法在 ruby on rails 中打印数据库记录

来自分类Dev

将数据从 MySQL 数据库移植到 PostgreSQL

来自分类Dev

无法终止 Postgresql 数据库上的活动会话

Related 相关文章

  1. 1

    Ruby on Rails:更新数据库中的布尔记录

  2. 2

    从列表<>到数据库记录重复

  3. 3

    在不重新查询数据库的情况下在rails中对活动记录进行排序?

  4. 4

    PostgreSQL中的跨数据库查询

  5. 5

    Laravel用户活动数据库记录器

  6. 6

    查询具有多种记录类型的CloudKit数据库

  7. 7

    Postgres数据库查询以过滤活动记录结果

  8. 8

    关于使用存储在记录中的数据库名称的跨数据库子查询

  9. 9

    无法使用带有node.js的axios POST将json记录插入到postgresql数据库中?

  10. 10

    从数据库获取每个n条记录-Ruby on Rails

  11. 11

    查询数据库postgreSQL

  12. 12

    通过rake任务中的活动记录以编程方式查询数据库表

  13. 13

    查询到sqlite数据库出错

  14. 14

    无法记录正确的时间到数据库

  15. 15

    查询具有多种记录类型的CloudKit数据库

  16. 16

    如何不搜索数据库中的活动记录

  17. 17

    Ruby on Rails活动记录查询

  18. 18

    SQL查询问题:并非从mysql数据库中的多个表中检索到所有记录

  19. 19

    显示来自mysql查询数据库的单个记录

  20. 20

    数据库字段到MySQL查询

  21. 21

    根据select查询结果更新数据库记录

  22. 22

    Rails 5.1 (postgresql):高效的数据库查询来选择父记录和过滤的子记录

  23. 23

    从我的 firebase 数据库读取数据到活动

  24. 24

    如何使用id跨数据库查询记录

  25. 25

    进行 MS Access 查询,允许通过 ODBC 驱动程序将数据输入到 PostgreSQL 数据库

  26. 26

    如何使用Ruby修复csv文件中的标题然后复制到postgresql数据库?

  27. 27

    无法在 ruby on rails 中打印数据库记录

  28. 28

    将数据从 MySQL 数据库移植到 PostgreSQL

  29. 29

    无法终止 Postgresql 数据库上的活动会话

热门标签

归档