将SQL查询转换为Ruby

时间:2014-09-11 00:15:59

标签: mysql ruby

需要帮助将此SQL查询转换为Ruby。我在轨道上4.1.5

"SELECT COUNT(*) FROM ab_splits 
    INNER JOIN ab_templates ON ab_splits.AS_templateId = ab_templates.AB_id
    GROUP BY AS_templateId"

第一个模型:

class AbSplits < ActiveRecord::Base

  self.table_name = "ab_splits"
  self.primary_key= :AS_id

end

第二种模式:

class AbTemplates < ActiveRecord::Base

  self.table_name = "ab_templates"
  self.primary_key= :AB_id

end

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

首先,您使用ActiveRecord执行此操作(请注意模型文件中的< ActiveRecord::Base)。它是一个将Ruby对象映射到关系数据库(因此,对象关系映射库或ORM)的库。

您需要告诉您的模型一些关于数据库结构的信息:

class AbSplits < ActiveRecord::Base
  self.table_name = "ab_splits"
  self.primary_key = :AS_id
  belongs_to :ab_template, :foreign_key => "AS_templateId"
end

class AbTemplates < ActiveRecord::Base
  self.table_name = "ab_templates"
  self.primary_key = :AB_id
  has_many :ab_splits, :class_name => :AbSplits, :foreign_key => "AS_templateId"
end

执行此操作时,您可以执行以下ActiveRecord查询:

AbTemplates.joins(:ab_splits).group(:AS_templateId).count

您将获得一个模板ID为密钥的哈希值,并计为值。

请注意,如果您的表,列和类名称遵循Rails方式(包含表splits (id, template_id)templates (id)),那么这将更加痛苦:

class Split < ActiveRecord::Base
  belongs_to :template
end

class Template < ActiveRecord::Base
  has_many :splits
end

Template.joins(:splits).group(:template_id).count