需要帮助将此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
感谢任何帮助。
答案 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