Ruby on rails 对Ruby活动记录的Postgresql数据库查询

Ruby on rails 对Ruby活动记录的Postgresql数据库查询,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,有表audits和audit_status,需要获取这两个表中不常见的数据。我已经有一个在postgresql中工作的查询,如何将其转换为Ruby active record 以下是Psql查询 你的关联模型是审计属于审计状态,并且审计状态有很多审计,不是吗?你想知道Audit拥有多少Audit_状态,是吗 如果是,您应该使用计数器缓存阅读此内容 虽然:counter_cache选项是在 包括“属于”声明,必须添加实际列 到关联的模型。在上述情况下,您需要添加一个 将名为count\u audi

有表audits和audit_status,需要获取这两个表中不常见的数据。我已经有一个在postgresql中工作的查询,如何将其转换为Ruby active record

以下是Psql查询


你的关联模型是审计属于审计状态,并且审计状态有很多审计,不是吗?你想知道Audit拥有多少Audit_状态,是吗

如果是,您应该使用计数器缓存阅读此内容

虽然:counter_cache选项是在 包括“属于”声明,必须添加实际列 到关联的模型。在上述情况下,您需要添加一个 将名为count\u audit的列添加到audit\u状态模型中

通过运行以下命令,将count\u audit属性添加到audit\u status表中:

rails g migration AddCountAuditToAuditStatuses count_audit:integer
然后运行rakedb: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
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">]
并创建两条审核记录,获取审核状态id的审核状态id

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

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
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">]

您是想让rails中的查询返回对象,还是只想返回原始结果?如果是后者,请检查active record中连接方法的execute方法。我需要精确转换的ruby代码,可以使用它来代替通过sql查找。\u……您可以发布表的关联吗?id-integer,name-stringid-integer,audit\u status\u id-integerNo,我指的是模型上的关联。审核属于审核状态,并且审核状态有很多审核?谢谢你的回复。但是我用另一种方式解决了这个问题。我正在添加数据also@user3713745:但像您这样的最佳实践似乎是使用计数器缓存。它完全执行您想要执行的操作,并内置到ActiveRecord中,而不是Audit.joins:Audit\u status.selectname作为status,countaudit\u status\u id作为count.group:name
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">]
@audit_status = Audit.joins( :audit_status).select("name as status,count(audit_status_id) as count").group(:name)