2014-09-11 47 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