2016-06-07 47 views
0
@counseling = Counseling.ransack(params[:q]) 
@counselings = @counseling.result.joins('RIGHT JOIN "subjects" ON "subjects"."id" = "counselings"."subject_id"') 
@result = {} 
@result[:data] = @counselings.group(row_condition).count 

块引用红宝石如何强制输出0时计数没有行

def self.create_case_sql_for_nested_tree2(foreign_key) 
    modelClass = foreign_key.sub(/_id3$/, '').camelize.constantize 
    @when_then_conditions = modelClass.roots.map do |o| 
     o.children.map do |c| 
     c.children.map do |g| 
     idlist = g.self_and_descendants.pluck(:id) 
     "WHEN subject_id IN(#{idlist.join(',')}) THEN #{g.id}" 
     end 
     end 
    end 
    "CASE #{@when_then_conditions.join(' ')} ELSE null END" 
end 
+0

你能更准确的了解您的问题。因为如果没有找到行,count通常会返回0。 –

+0

select s.id,count(nullif(subject_id,0))来自counselings的AS计数c right加入对象s on c.subject_id = s.id group by s.id order by s.id; – Poo

+0

当我执行上面的SQL输出显示0计数的记录但我不知道如何在红宝石中实现相同。 – Poo

回答

2

根据您的意见,您想加入CounselingSubject模型并计算subject_id。我认为你可以像这样做,

Counseling.joins(:subject).count(:subject_id) 

如果你想要把任何地方的条件,你可以像这样做,

Counseling.joins(:subject).where("some condition").count(:subject_id) 
+0

感谢您的回复。正如你可以在我的sql看到的,我想要在辅助模型的领域subject_id上进行计数,但是希望按主题模型subjectid字段进行分组。这就是为什么我使用CASE SQL。 – Poo

+0

问题是我不知道如何做正确的加入。当我们使用连接(:主题)时,它会进行内部连接。我需要计数功能来计算空行。我不认为在ruby中有任何像nullif这样的函数来执行该操作..count(:subject_id)将计算所有非空行。 – Poo