2014-09-11 116 views
-1

只需将此SQL查询翻译成Ruby即可。我在轨道4.1.5将SQL查询转换为Ruby

"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 

任何帮助表示赞赏。

+2

这是没有意义的。你的意思是翻译成ActiveRecord,DataMapper或Sequel? Ruby不能做SQL的功能; ORM库可以。另外,如果不知道你的模型,这有点难以回答。 – Amadan 2014-09-11 00:20:39

+0

@Amadan抱歉,如果我的问题含糊不清。我对SQL很少有经验。我想知道是否有人会将上面的查询翻译成Ruby on Rails类似的东西:AbSplits.select(“ab_templates.AB_id,count(ab_splits.ab_template_id)”)。joins(:ab_templates).group(“AS_templateId”) – user3361996 2014-09-11 00:29:24

+1

请发布代码为导轨模型 – max 2014-09-11 00:32:38

回答

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